正在回答
1回答
IPing这个组件是比较好理解的。
就像你诊断网络是不是有问题的时候,会想到ping www.baidu.com一样。
IPing这个组件也是做这个事情的。默认是NoOpPing,一个啥都不干的ping。上去认为一切都是美好的,每个实例都可用。
但是,如果实际项目中,比如微服务A调用B,B有3个实例,某个瞬间,B挂掉1个实例。此时,由于Eureka的心跳机制,以及微服务侧的本地缓存,会导致一段时间后,A才能感知到(Eureka默认保证90秒,所有微服务上的缓存和Eureka Server达到最终一致。而Ribbon是ServerListUpdater也是个定时任务,默认是30秒。)。此时,就有可能会调用到不可用的微服务B实例。
这个时候,就可以配置IPing为PingUrl,甚至是自己扩展一个IPing,去诊断实例是否可用,从而减少调用到不可用实例的概率。
之所以说减少不可用实例的概率,是因为据我个人研究,IPing不是每次请求都Ping的,而是以下两种场景才Ping:
Ribbon微服务B实例列表变了(比如原先有3个实例,现在又启动了一个实例,变四个了;或者下线了1个实例,变成了2个),会Ping下;
定时Ping,默认周期是10秒
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星