2015-10-18 14 views
8

Quando si utilizza gRPC da Java, è possibile memorizzare nella cache gli stub (client) e chiamarli in un ambiente multi-thread o i canali sono thread-safe e possono essere tranquillamente memorizzati nella cache?I canali/stub in gRPC thread-safe

Se c'è un'interruzione di rete, dovrei ricreare il canale o è abbastanza intelligente da ricollegarsi? Non riuscivo a trovare informazioni rilevanti su http://www.grpc.io/docs/

Grazie

risposta

10

risposta alla prima domanda:

canali sono thread-safe; io.grpc.Channel è contrassegnato con l'annotazione @ThreadSafe. Gli stub sono anche thread-safe, motivo per cui la riconfigurazione crea un nuovo stub.

risposta alla seconda domanda:

Se c'è un'interruzione di rete, non è necessario ricreare il canale. Il canale si riconnetterà con il backoff esponenziale, approssimativamente come descritto dal documento connection backoff. Java non è conforme al 100% a quell'algoritmo, perché non aumenta i timeout di connessione nei tentativi successivi. (Da non confondere con il backoff esponenziale, che è implementato.)

Come una piccola "getcha", la risoluzione DNS con Netty al momento (v0.9.0) si verifica quando il canale viene creato e non verrà più eseguita più tardi. La prossima versione non dovrebbe avere questo problema.

Problemi correlati