Eureka注册中心

1、Eureka注册中心

主管服务注册与发现,也就是微服务的名称注册到Eureka,就可以通过Eureka找到微服务,而不需要修改服务调用的配置文件。

1.1 服务调用产生的问题

  • 服务消费者该如何获取服务提供者的地址信息?

  • 如果有多个服务提供者,消费者该如何选择?

  • 消费者如何得知服务提供者的健康状态?

1.2 Eureka作用

  • 消费者该如何获取服务提供者具体信息?

    • 服务提供者启动时向eureka注册自己的信息
    • eureka保存这些信息
    • 消费者根据服务名称向eureka拉取提供者信息
  • 如果有多个服务提供者,消费者该如何选择?

    • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  • 消费者如何感知服务提供者健康状态?

    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
    • eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

1.2.1 总结

在Eureka架构中,微服务角色有两类:

  • EurekaServer:服务端,注册中心

    • 记录服务信息
    • 心跳监控
  • EurekaClient:客户端

    • Provider:服务提供者,例如案例中的 user-service
      • 注册自己的信息到EurekaServer
      • 每隔30秒向EurekaServer发送心跳
    • consumer:服务消费者,例如案例中的 order-service
      • 根据服务名称从EurekaServer拉取服务列表
      • 基于服务列表做负载均衡,选中一个微服务后发起远程调用

1.3 搭建EurekaServer

1.3.1 引入eureka-server依赖

1
2
3
4
5
6
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>

1.3.2 添加@EnableEurekaServer注解

1
2
3
4
5
6
7
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class,args);
}
}

1.3.3 在application.yml中配置eureka地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server:
port: 9000 #端口
spring:
application:
name: eureka-server #服务名称
#配置eureka server
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false #是否将自己注册到服务注册中心
fetch-registry: false #是否从eureka中获取注册信息
service-url: #配置暴露给eureka Client 的请求地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

1.4 服务注册

1.4.1 引入eureka-client依赖

无论是消费者还是提供者,引入eureka-client依赖、知道eureka地址后,都可以完成服务注册

1
2
3
4
5
<!--eurekaClient依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

1.4.2 在application.yml中配置eureka地址

1
2
3
4
5
# 配置eureka注册地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:9000/eureka

1.5 服务发现

1.5.1 引入eureka-client依赖

1.5.2 在application.yml中配置eureka地址

1.5.3 给RestTemplate添加@LoadBalanced(负载均衡)注解

1
2
3
4
5
6
7
8
/*
* 启动类中
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}

1.5.4 用服务提供者的服务名称远程调用

点击这里查看源码。