2016-12-14 99 views
1

我正在使用Consul進行服務發現;並在客戶端啓動期間在NameResolver.start(偵聽器偵聽器)中提供服務器列表。在客戶端動態添加服務器/運行時

  1. 我如何可以添加加入,在爲服務供應商(在領事)
  2. 我使用輪循新的服務器;並且當其中一臺服務器死亡時;它會一直打到死亡的服務器
  3. 您是否有樣本要重試UNAVAILABLE異常?我只想在放棄客戶端之前至少重試一次。

預先感謝您

回答

0

當服務器變化(領事)的名單,撥打NameResolver.Listener.onUpdate(),你應該已經呼籲至少一次。

負載均衡實現和API正在接受大規模的返工,這將大大提高循環。

+0

是我做的NameResolver.Listerner.onUpdate();但是當Consul狀態改變時,我不能再次調用NameResolver.Listerner.onUpdate(),因爲監聽器被調用者ManagedChannel取消。我試着在NameResolver.start(Listener listener)方法中保留Listner的引用。 – sid

+0

唯一的選擇好像我將不得不編寫自己的Load Balancer;再次不幸的是我不能使用TransportManager.updateRetainedTransports(),因爲它尚未實現。所有這些都是爲了避免使用Ngnix或其他HTTP2負載均衡器代替gRPC客戶端負載平衡器 – sid

+0

NameResolver應將start()過程中提供的偵聽器存儲爲字段,然後在發生更改時調用onUpdate()。我不明白如何另一塊代碼可以將參考歸零。這是由內置的DnsNameResolver完成的。 –

0

我寫了我自己的LoadBalancer;和@Override pickTransport()到Consul的RoundRobin健康gRPC服務器。

相關問題