前提: 在测试阶段A应用部署了集群(两台),后面偶然间发现,当其中一个节点挂了之后的那一下,当前端请求进来的时候,Feign发起网络请求的时候发送到了挂掉的那台节点上,会直接抛出异常
feign.RetryableException: 拒绝连接 executing POST
导致在注册中心还没有检测到该服务已经挂了的时候,请求还是会分发到该节点,因为是配置了全局异常处理,前端会直接提示服务器开小差,导致用户体验感很差。
按照正常的逻辑:当集群中某个节点挂了的时候,就应该负载到其他正常的节点中。
但是这里Feign直接把异常抛出来了,被全局异常捕获到了,前端收到了就是服务器开小差了。
怎么让前端用户体验看出来呢?后台应用丝滑的过度到正常节点中呢?
所以我这里配置了 Feign重试机制,当Feign请求出错时,触发重试机制,在重试的时间中,注册中心就会检测到该节点已经挂了,Ribbon负载的时候就会把该节点剔除,就丝滑的过度到了正常的节点。
openFeign重试机制yaml配置:
openfeign: client: config: default: # 全局配置 connect-timeout: 1000 # 连接超时时间(毫秒) read-timeout: 1000 # 读取的超时时间(毫秒) retryer: cn.iocoder.yudao.module.app.api.oauth2.CustomRetryer
配置文章来源于: https://blog.csdn.net/xaiobit_hl/article/details/134219576
没配置重试机制前,请求到错误的节点会直接报错
配置重试机制后使用压测测试结果,可以看到每次请求都成功了,丝滑切换,不会报错导致前端 提示服务器开小差~
以上仅代表个人观点,仅供参考。欢迎各位大佬指正小弟,一起成长,一起加油