2016-12-14 4 views
1

Ich benutze Consul für Service Discovery; und die Liste der Server in NameResolver.start (Listener Listener) während des Client-Starts.Server dynamisch clientseitig hinzufügen/Runtime

  1. Wie kann ich neue Server hinzufügen, die als Dienstleister Beigetreten-in (in Consul)
  2. I Round Robin bin mit; und wenn einer der Server stirbt; es trifft weiterhin den toten Server
  3. Würdest du ein Beispiel haben, um auf UNNAAILABLE Ausnahme zu versuchen? Ich möchte es nur einmal versuchen, bevor ich auf der Client-Seite aufgäbe.

Vielen Dank im Voraus

Antwort

0

Wenn die Liste des Server ändern (in Consul), NameResolver.Listener.onUpdate() nennen, die man mindestens einmal Aufruf bereits werden soll.

Die Load Balancing-Implementierungen und APIs erhalten eine massive Überarbeitung, die Round-Robin erheblich verbessern sollte.

+0

Ja beim Start i do NameResolver.Listerner.onUpdate(); aber dann, wenn sich der Konsul ändert; Ich kann NameResolver.Listner.onUpdate() nicht erneut aufrufen, da der Listener vom Aufrufer ManagedChannel ungültig gemacht wird. Ich habe versucht, die Ref von Listner in NameResolver.start (Listener Listener) -Methode zu halten. – sid

+0

Nur Option scheint wie ich meinen eigenen Load Balancer schreiben muss; Leider kann ich TransportManager.updateRetainedTransports() nicht verwenden, da es noch nicht implementiert wurde. All dies, um Ngnix oder andere HTTP2 Load Balancer anstelle von gRPC zu vermeiden. Client Load Balancer – sid

+0

Der NameResolver sollte den Listener, der während start() zur Verfügung gestellt wurde, als Feld speichern und dann OnUpdate() aufrufen, wenn sich etwas ändert. Ich verstehe nicht, wie ein anderer Code den Verweis auf Null setzen könnte. Dies wird durch den integrierten DnsNameResolver erledigt. –

0

Ich habe meinen eigenen LoadBalancer geschrieben; und @Override pickTransport() zu RoundRobin gesunden gRPC-Servern von Consul.

Verwandte Themen