背景
你已经应用了 客户端服务发现 或者 服务端服务发现。服务实例必须在启动时注册到注册 服务注册中心以被发现,在终止时取消注册。
问题
服务实例怎样从服务注册中心注册和取消注册?
限制
- 服务实例必须在启动时注册到注册中心,终止时取消注册
- 服务实例崩溃时,必须从注册中心取消注册
- 服务正在运行,但是没办法处理请求,必须从注册中心取消注册
解决方案
服务实例自己负责注册到服务注册中心。启动时,服务实例将自己(主机和IP地址)注册到服务注册中心,让它自己能被发现。客户端通常必须周期性的更新它的注册信息,因此注册中心知道它还可用。当它终止时,服务实例自己从服务注册中心取消注册。
这个功能通常由微服务基架框架提供
示例
微服务示例应用是采用自注册的一个示例应用。它用Scala编写,采用了Spring Boot和Spring Cloud作为微服务基架。该应用使用Eureka 作为 服务注册中心,它也是Netflix OSS的一个组件。
服务注册是通过在Java配置类上添加@EnableEurekaClient
注解:
@Configuration
@EnableEurekaClient
class EurekaClientConfiguration {
这个注解导致服务实例注册到Eureka。
结果
自注册有如下优势:
- 服务实例知道它自己的状态,因此可以实现一个比UP / DOWN更复杂的状态模型,比如:STARTING,AVAILABLE。。。
也有如下弊端:
- 服务与服务注册中心耦合
- 你必须在你用来编写服务的每一个编程语言 / 框架里实现服务注册逻辑,比如:NodeJS / Javascript,Java / Scala,等等。
- 正在运行,但是无法处理请求的服务实例,通常缺乏从服务注册中心取消注册的行为。