Wenn ich gRPC aus Java verwende, kann ich Stubs (Clients) zwischenspeichern und sie in einer Multithread-Umgebung aufrufen oder sind die Kanäle threadsicher und können sicher zwischengespeichert werden?
Wenn es einen Netzwerkausfall gibt, sollte ich den Kanal neu erstellen oder er ist intelligent genug, um die Verbindung wiederherzustellen? Ich konnte keine relevanten Informationen über Ссылка
findenDanke
Beantworten Sie die erste Frage:
Kanäle sind threadsicher; io.grpc.Channel
ist mit @ThreadSafe
annotation gekennzeichnet. Stubs sind auch Thread-sicher, weshalb die Rekonfiguration einen neuen Stub erzeugt.
Beantworten Sie die zweite Frage:
Wenn ein Netzwerkausfall vorliegt, müssen Sie den Kanal nicht neu erstellen. Der Kanal wird wieder mit dem exponentiellen Backoff verbunden, ungefähr wie im Verbindungs-Backoff -Dokument beschrieben . Java entspricht diesem Algorithmus nicht zu 100%, da es die Verbindungstimeouts in späteren Versuchen nicht erhöht. (Nicht zu verwechseln mit dem exponentiellen Backoff, der implementiert wird.)
Als kleines "Gotcha" passiert DNS-Auflösung mit netty (v0.9.0), wenn der Kanal erstellt wird, und wird später nicht erneut ausgeführt. Die nächste Version sollte dieses Problem nicht haben.
Tags und Links java thread-safety grpc