前言
Spring Cloud Eureka是Spring Cloud Netflix微服务套件的一部分,基于Netflix Eureka做了二次封装,主要负责实现微服务架构中的服务治理功能。Eureka是一个基于REST的服务,并且提供了基于Java的客户端组件,能够非常方便的将服务注册到Eureka中进行统一管理。
服务治理在微服务架构中是必不可少的一部分,安粮开源的Dubbo框架就是针对于服务治理的,服务治理必须要有一个注册中心,除了用Eureka作为注册中心外,我们还可以使用Consul、Etcd、Zookeeper等来作为服务的注册中心。
在分布式系统中有个注明的CAP定理:
- C 数据一致性
- A 服务可用性
- P 服务对网络分区故障的容错性
Eureka rest api
Eureka作为注册中心,其本质是存储了每个客户端的注册信息,Ribbon在转发的时候,会获取注册中心的服务列表,然后根据对应的路由规则来选择一个服务给Feign来进行调用。我们也看单独使用Eureka作为注册中心,Eureka提供的API可以使我们获取单个服务的实例信息。
示例: 获取App-Test服务的注册信息
GET http://localhost:6001/eureka/apps/App-Test
Content-Type: application/json
Accept: application/json
响应:
元数据使用
Eureka元数据有两种类型,分别是框架定好的标准元数据和用户自定义数据。标准的元数据是主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会发布在服务注册表中,用于服务之间的调用。自定义元数据可以使用eureka.instance.metadataMap进行配置。
服务上下线监控
在某些特定需求场景下,我们需要对服务的上下线进行监控,上下线考研进行邮件通知,Eureka提供了事件监听的方式来扩展。
目前支持的事件如下:
- EurekaInstanceCanceledEvent 服务下线事件
- EurekaInstanceRegisteredEvent 服务注册事件
- EurekaInstanceRenewedEvent 服务续约事件
- EurekaRegistryAvailableEvent 注册中心启动事件
- EurekaServerStartedEvent Eureka Server启动事件
基于Eureka提供的事件机制,可以监控服务的上下线过程,在过程发生中可以发送邮件通知。
@Component
public class EurekaStateChangeListener {
@EventListener
public void listen(EurekaInstanceCanceledEvent event) {
System.out.println(event.getServerid() + "\t" +
event.getAppName() + "服务下线";
}