spring-cloud服务注册与发现组件——Eureka

Spring Cloud之服务发现——Eureka(发音为[juә’ri:kә])

  • 服务注册与发现以及反馈的实现流程:

    1. Provider将自己的节点信息发送到指定的服务注册机上;
    2. 服务注册机将Provider发送过来的信息保存在指定区域,等待Consumer查询;
    3. Provider通过定期向服务注册机发送消息确保自己不会被注销,而当服务注册机长时间未收到某个Provider发送过来的信息时,会自动将该Provider注销。
    4. 当Provider网络地址发生变更时,会自动重新注册节点信息到服务注册机,避免了人工修改配置的问题。
  • Eureka的实现机制:

    1. Eureka分为Server端和Client端,Server端提供服务发现的能力,当微服务节点启动时,会自动向Server端注册自己的节点信息,而Server端则负责存储这些节点信息,供服务调用者查询;
    2. Client端一般和微服务集成,为微服务提供注册服务到Server端的能力,并从Server端获取最新的已注册服务列表的信息缓存到微服务端;
    3. 微服务启动后,会周期性(默认30s)向Server端发送心跳以防止被注销;
    4. 同时,Server端也会周期性(默认90s)的检查已注册的各个微服务是否仍然存活,如果超时,则注销该微服务的注册信息;

Eureka的基础实现

  • Server端实现

首先创建一个基础的SpringBoot工程,假设是Maven工程,在POM文件中引入如下依赖:

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

在启动类中加入注解@EnableEurekaService,声明这是一个Server实例。

application.yml中加入如下内容:

1
2
3
4
5
6
7
8
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://localhost:8761/eureka/
  • Client端实现

首先创建一个基础的SpringBoot工程,假设是Maven工程,在POM文件中引入如下依赖:

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

application.yml中加入如下内容:

1
2
3
4
5
6
7
8
9
spring:
application:
name: microsoftservice-provider-user
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true

高可用Eureka实现

单节点的Eureka无法满足线上环境高可用的要求。一旦发生故障,轻则影响服务的可达性,重则引发服务瘫痪,因此,以集群的方式部署Eureka是非常必要的。

Eureka主页访问认证实现

非JVM的微服务注册与发现

Eureka的自我保护模式实现