首先我们需要了解什么是注册中心,用官方的话来说就是服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是微服务架构中最基础的设施之一。
要是用子月的话来说的话就是注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。举个简单的例子,就拿子月的微信列表来说,假如我想给陆峥发个消息,那么子月就要先去微信列表里面找到陆峥的通讯录,然后进行发消息。这个就叫做服务的调用。
有一天,秦月重新创建了一个微信号,她把她的微信号告诉了我,我加上了她的微信,那么这个就叫做服务的注册。
那子月的微信列表就相当于注册中心。
总结:服务注册中心的作用就是服务的注册和服务的发现
子月出品,必是精品。多的不说,上图
Register(服务注册):把自己的 IP 和端口注册给 Eureka。
Renew(服务续约):发送心跳包,每 30 秒发送一次,告诉 Eureka 自己还活着。如果 90 秒还未发送心跳,宕 机。
Cancel(服务下线):当 Provider 关闭时会向 Eureka 发送消息,把自己从服务列表中删除。防止 Consumer 调用到不存在的服务。
Get Registry(获取服务注册列表):获取其他服务列表。
Remote Call(远程调用):完成服务的远程调用。
那么为什么需要注册中心呢?
有着以下原因,服务注册后,如何被及时发现 服务宕机后,如何及时下线 服务如何有效的水平扩展 服务发现时,如何进行路由 服务异常时,如何进行降级 注册中心如何实现自身的高可用。
这里大家需要注意一点就是renew的心跳机制,假如一个服务的生产者过了九十秒还没有向注册中心发送心跳包,那么这个服务的生产者是不会被注册中心所剔除的,因为还可能是因为网络的波动造成的。现实生活中要是被剔除的话,那会对业务造成很大的危害的,这个时候就要说到eureka的自我保护机制了。也就是当服务的生产者没有发送心跳包的时候,注册中心会把这个失联的服务生产者进行挂起。(Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,同时提示一个警告。这种算法叫做 Eureka Server 的自我保 护模式。)当再次接收到他的心跳包的时候,这个服务的生产者就会重新上线。
注册中心配置自我保护
eureka:
server:
enable-self-preservation: false # true:开启自我保护模式,false:关闭自我保护模式
eviction-interval-timer-in-ms: 60000 # 清理间隔(单位:毫秒,默认是 60*1000)
那么又到了子月的提问环节,那么什么时候服务的生产者会完全的从注册中心中被剔除呢?
这个时候eureka的优雅停服就显得极为重要了
配置了优雅停服以后,将不需要 Eureka Server 中配置关闭自我保护。本文使用 actuator 实现。
服务提供者需要添加依赖
<!-- spring boot actuator 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
这个依赖的名字和actor差不多对吧,联想记忆法,演员是优雅的,那么eureka的优雅停服呢?
优雅停服还需要在配置文件中加上以下配置
# 度量指标监控与健康检查
management:
endpoints:
web:
exposure:
include: shutdown # 开启 shutdown 端点访问
endpoint:
shutdown:
enabled: true # 开启 shutdown 实现优雅停服
这里子月需要说明的一点就是 这个include后面的参数,这里是指明了打开shutdown端点,要是换成 * 的话代表的是所有的端点,但是打开所有端点,那么shutdown端点也是不会被打开的,因为这个端点是非常敏感的(万一有人知道了你的服务地址,恰巧你又打开了shutdown端点,那么你的服务就会被直接停掉的),还有一点就是enable 后面的参数要是true.
这里就正式开启微服务的篇章了,这里是子月迈出的一小步,也希望是大家的一大步,总之就是希望能够帮到大家。子月有什么不足的地方也请大家不吝赐教。(*^▽^*)