背景
技术线,springcloud,zookeeper,ribbon
由于公司发版比较频繁,每次服务提供方发版总会有些有些异常
No instances available for ***
解决方式
ribbon的配置主要在RibbonClientConfiguration中。
通过变更IRule可以更改获取server的规则
实际使用准备结合这2中rule来替换。
这里的${ribbon.client.name}无法配置,因为每个server是一个独立的context,具体实现是SpringClientFactory,每个server name一个独立的AnnotationConfigApplicationContext。我们项目中设置配置会出错。
替补
项目启动的时候扫描所有feignclinet注解类,拿到所有的server-name
这时候可以通过System.setProperty("XXX.ribbon.NFLoadBalancerRuleClassName",MyRetryRule)的方式设置。
虽然绕了一点,但是在不改变底层设计的方式上实现了需求。