dubbo-admin禁用所有服务:
服务方provider1执行结果:
服务方provider2执行结果:
很明显的看到服务方provider1 还是被调用了,但我把这两个服务全部禁用掉了,为什么还会出现这种原因,求大神解释一下原因
http://www.oschina.net/question/2292000_2157712?sort=time
我现在也在使用duboo+zookeeper,遇到了这个一模一样的问题(dubbo禁用服务,但消费者还是能访问).
我各种查找资料,梳理源码仍旧找不到解决方案.
请问你现在有解决方案吗?
我也遇到一样的问题,可以通过服务屏蔽解决。
我测试发现多个提供者的情况下是禁用有效的,如果所有提供者都被禁用了,那么和所有提供者全部启用是一个效果
这个问题我之前提issue 问过开发者,意思是说当服务就剩一个时候禁用会导致服务不可用,所以不允许剩下一个服务的时候对服务进行禁用操作
重启zookeeper试一下。
Dubbo服务提供者选择逻辑:
只有一个提供者:
直接选择
有两个提供着:
轮训,重试的时候优先选择没有调用过的
超过两个提供者:
1、首先根据负载均衡算法选出一个提供者(默认是随机算法)。
2、判断随机出来的被调用过(这里只有重试的时候才可能为true),或者提供者不可用,则按如下逻辑重新选择一个
a)如果配置了提供者可用检测,则从所有提供着中选择一个可用的,并且没有被调用过的
b)如果没有配置提供者可用检测,则从所有提供着中找出所有未调用过的,如果超过1个,则用负载均衡算法随机选择一个
c)如果上面两种方式都没有找到,则从所有已经调用过的提供者找出所有可用的,如果超过1个,则用负载均衡算法随机选择一个
3、如果第2步也没有选择出来,则按如下逻辑重新选择一个
a)先找出第1步中选择出的提供者在数组中的位置,如果它不是最后一个,那么就取它后面的一个,否则就返回它自己
总结以上:一个直接使用,两个轮训未用过的,超过两个尽量找未用过且可用的,次之已调用过的可用的,最后无论如何选择一个,即使是不可用。
dubbo服务禁用后,重启下又会失效了