【SpringCloud】Eureka原理分析、搭建Eureka服务、服务注册、服务发现

简介: 【SpringCloud】Eureka原理分析、搭建Eureka服务、服务注册、服务发现

一、Eureka原理分析

1.1 服务调用出现的问题

当有两个服务,第一个服务需要远程调用第二个服务,采用的方式是发起一次HTTP请求,在之前的代码中是将服务提供者的ip和端口号硬编码到服务发起者中,采用这种方式会出现一些问题,在开发时,会有开发环境、测试环境、生产环境等,每次环境的变更可能会使服务的地址发生改变,采用硬编码就需要在环境发生变化时修改硬编码,然后重新编译打包,这样会很麻烦,同时,为了处理并发等问题,服务提供者可能会是一个集群,集群中每个服务提供者都有自己的地址,这样由于服务消费者的硬编码,将无法准确的得到想要的服务。

1.2 Eureka的作用

  • 服务消费者该如何获取服务提供者的地址信息?
  • 如果有多个服务提供者,消费者该如何选择?
  • 消费者如何得知服务提供者的健康状态?

eureka中有一个eureka-server(注册中心)和作为eureka-client(eureka客户端)的服务消费者和服务提供者,其中服务提供者在启动时会把自己的信息注册给eureka-server,每一个服务启动时都会进行注册操作,此时,若有服务消费者想要获取一个服务,就可以从eureka注册中心中找,服务消费者将自己需要的服务发给注册中心,注册中心就会返回对应的服务信息,但服务提供者可能是一个集群,那么注册中心返回的结果可能是多个,这时可以采用负载均衡的算法挑出一个,然后发起远程调用的请求。

每个服务每隔30s都会向eureka-server(注册中心)发送一次心跳,表示当前服务正常运行,当eureka-server(注册中心)超过规定时间没有收到一个服务的心跳,会自动将这个服务移除,说明这个服务运行出现了问题。

二、 搭建Eureka

2.1 创建项目

在现有项目中创建名为eureka-server(可以自定义名称)的子模块



  • 选择Maven:


  • 在pom.xml中添加Eureka的依赖,添加SpringBoot的启动依赖
<dependencies>
        <!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2.2 编写启动类,添加@EnableEurekaServer注解

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

2.3 添加application.yml的配置文件

server:
  port: 10086
spring:
  application:
    name: eurekaserver  # eureka服务名称
eureka:
  client:
    service-url:  # eureka地址信息
      defaultZone: http://localhost:10086/eureka

2.4 注册服务到Eureka

  • 将一个服务注册到EurekaServer步骤如下:

2.4.1 在服务项目中引入eureka客户端依赖

<!--eureka客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.4.2 配置application.yml文件的信息

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: userservice # user服务的服务名称
eureka:
  client:
    service-url: #eureka地址信息
      defaultZone: http://localhost:10086/eureka

2.4.3 模拟多实例部署

  • 在idea中选择一个部署好Eureka的模块,右键选择Copy Configuration

  • 自定义一个名字:

  • 配置与原模块不同的端口号,点击Environment,在VM options中修改端口-Dserver.port=新端口号


2.5 服务发现

2.5.1 在order-service完成服务拉取

  • 服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
  • 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
//2.利用RestTemplate发起http请求,查询用户
        String url = "http://userservice/user/" + order.getUserId();

2.5.2 在order-service顶目的启动类Orderapplication中的RestTemplate添加负载均衡注解

@Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }


相关文章
|
10月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
841 0
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
819 0
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
4831 14
|
Java Spring 容器
springcloud-config客户端启用服务发现报错找不到bean EurekaHttpClient
解决 Spring Cloud Config 客户端启用服务发现时报错找不到 bean `EurekaHttpClient` 的问题,主要涉及版本兼容性、依赖配置和正确的配置文件设置。通过检查依赖版本、添加必要的依赖项、配置文件的正确性以及启用服务发现注解,可以有效解决此问题。确保日志中没有其他错误信息也是关键步骤之一。通过这些方法,可以确保 Spring Cloud Config 与 Eureka 客户端正常工作。
300 6
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
981 5
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
327 0
|
负载均衡 Java API
Spring Cloud原理详解
Spring Cloud原理详解
383 0
|
负载均衡 Java 网络架构
Spring Cloud原理详解
介绍了Spring Cloud的原理和核心组件,包括服务注册与发现、配置管理、负载均衡、断路器、智能路由、分布式消息传递、分布式追踪和服务熔断等,旨在帮助开发人员快速构建和管理微服务架构中的分布式系统。
671 0

热门文章

最新文章

下一篇
开通oss服务