优化provider和configuration的获取逻辑
diff --git a/dubbo/client.py b/dubbo/client.py
index 99cb17c..44bd8a1 100644
--- a/dubbo/client.py
+++ b/dubbo/client.py
@@ -163,7 +163,7 @@
providers = filter(lambda provider: provider['scheme'] == 'dubbo', map(parse_url, providers))
if not providers:
logger.debug('no providers for interface {}'.format(interface))
- del self.hosts[interface]
+ self.hosts[interface] = []
return
self.hosts[interface] = map(lambda provider: provider['host'], providers)
@@ -186,8 +186,7 @@
conf[configurator['host']] = configurator['fields'].get('weight', 100)
self.weights[interface] = conf
else:
- # 没有权重配置则意味着此配置可以被删除
- del self.weights[interface]
+ self.weights[interface] = {}
def _register_consumer(self, providers):
"""
@@ -230,8 +229,10 @@
:return:
"""
hosts = self.hosts[interface]
+ if not hosts:
+ raise RegisterException('no providers for interface {}'.format(interface))
# 此接口没有权重设置,使用朴素的路由算法
- if interface not in self.weights:
+ if interface not in self.weights or not self.weights[interface]:
return random.choice(hosts)
weights = self.weights[interface]
@@ -244,7 +245,7 @@
if hit <= sum(hosts_weight[:i + 1]):
return hosts[i]
- raise RegisterException('error for finding [{}] host with weight.'.format(interface))
+ raise RegisterException('Error for finding [{}] host with weight.'.format(interface))
def close(self):
self.zk.stop()