web-dev-qa-db-ja.com

gRPCのチャネル/スタブはスレッドセーフですか

JavaからgRPCを使用する場合、スタブ(クライアント)をキャッシュしてマルチスレッド環境で呼び出すことはできますか、それともチャネルはスレッドセーフで安全にキャッシュできますか?

ネットワークが停止した場合、チャネルを再作成する必要がありますか、それとも再接続するのに十分スマートですか? http://www.grpc.io/docs/ で関連情報が見つかりませんでした

ありがとう

18
julius

最初の質問への回答:

チャネルはスレッドセーフです。 io.grpc.Channel@ThreadSafeアノテーションでマークされています。スタブはスレッドセーフでもあるため、再構成によって新しいスタブが作成されます。

2番目の質問への回答:

ネットワークが停止している場合は、チャネルを再作成する必要はありません。チャネルは、おおまかに connection backoff docで説明されているように、指数バックオフで再接続します。 Javaは、後の再試行で接続タイムアウトを増加させないため、そのアルゴリズムに100%準拠していません(実装されている指数バックオフと混同しないでください)。

23
Eric Anderson