【Spring Cloud】Eureka自我保护机制

【学习背景】

在上篇博客中,学习了注册中心Eureka如何实现服务的发布与调用。而结合我们项目中的经验,对于接口服务或对接第三方服务,一般我们都需要考虑到重试机制,类似mq消息消费一样,由于某种原因,可能第一次消费失败了,而重试也许可以消费成功。对于Eureka而言,自身也包含这样一种重试功能。

【学习内容】

1. 两种角色?

EurekaClient(注册客户端)
EurekaServer(注册中心服务端)
在这里插入图片描述

2. 为什么会产生Eureka自我保护机制?

为了使EurekaClient可以正常运行,在EurekaClient客户端与EurekaServer服务端网络不通的情况下,EurekaServer不会将EurekaClient服务进行剔除。

3. 什么是Eureka自我保护机制?

默认情况下,EurekaClient定时向EurekaServer发送心跳包。

如果EurekaServer在一定时间内没有收到EurekaClient发送心跳包,便会直接从服务注册列表中剔除该服务(默认90s)

但是在短时间内丢失了大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务。

那么,紧接着就有一个问题了,在自我保护机制下,为什么不会剔除该服务呢?

原因在于为了防止EurekaClient是可以正常访问的,只是EurekaClient与EurekaServer网络不通,防止误删除。

4. 在什么环境下开启自我保护机制?

本地环境:建议禁止自我保护机制。

生产环境:建议开启自我保护机制。

5. 如何配置自我保护机制?

#关闭自我保护机制
eureka.server.enable-self-preservation=false

【学习总结】

对于Eureka这种自我保护机制来说,在项目开发过程中,还是非常有意义的。因为现在的项目中,就有一个问题,接口调用是一次性的,这次失败了,之后就没有自动重试的机制。每当遇到因为服务器问题或其他环境问题而导致接口调用失败,都需要我们使用自己开发的补偿机制接口,重新调用。而对于这种自我保护机制的重试功能,在短时间内如果环境问题好了,还是具有一些价值的。

猜你喜欢

转载自blog.csdn.net/u013034223/article/details/86735914