準備完了を待つ
リクエストを送信する前にサーバーの準備が完了するまでRPCを待機させる方法について説明します。
準備完了を待つ
リクエストを送信する前にサーバーの準備が完了するまでRPCを待機させる方法について説明します。
概要
これはスタブで使用できる機能で、リクエストを送信する前にサーバーが使用可能になるまでRPCを待機させます。これにより、一時的なサーバーの問題が障害を引き起こすことがないため、堅牢なバッチワークフローが可能になります。デッドラインは引き続き適用されるため、デッドラインを超えた場合は待機は中断されます。
チャネルがサーバーへの接続に失敗したときにRPCが作成された場合、「準備完了を待つ」を使用しないとすぐに失敗が返されます。「準備完了を待つ」を使用すると、接続が準備完了になるまでキューに入れられます。デフォルトは「準備完了を待つ」を**使用しない**です。
詳細なセマンティクスについては、こちらをご覧ください。
準備完了を待つ方法
スタブで「準備完了を待つ」を使用するかどうかを指定できます。これは、RPCが作成されたときに自動的に渡されます。
注記
サーバーの準備ができていないこと以外にも、RPCは他の理由で失敗する可能性があるため、エラー処理は依然として必要です。クライアントがサーバーにメッセージを送信したときに発生するイベントのシーケンスを、チャネルの状態と「準備完了を待つ」の設定に基づいて以下に示します。
sequenceDiagram
participant A as Application
participant RPC
participant CH as Channel
participant S as Server
A->>RPC: Create RPC using stub
RPC->>CH: Initiate Communication
alt channel state: READY
CH->>S: Send message
else Channel state: IDLE or CONNECTING
CH-->>CH: Wait for state change
else Channel state: TRANSIENT_FAILURE
alt with Wait-for-Ready
CH-->>CH: Wait for channel<br>becoming READY<br>(or a permanent failure)
CH->>S: Send message
else without Wait-for-Ready
CH->>A: Failure
end
else Channel state is a Permanent Failure
CH->>A: Failure
end
以下は状態ベースのビューです
stateDiagram-v2
state "Initiating Communication" as IC
state "Channel State" as CS
IC-->CS: Check Channel State
state CS {
state "Permanent Failure" as PF
state "TRANSIENT_FAILURE" as TF
IDLE --> CONNECTING
CONNECTING --> READY
READY-->[*]
CONNECTING-->TF
CONNECTING-->PF
TF-->READY
TF -->[*]: without\n wait-for-ready
TF-->PF
PF-->[*]
}
state "MSG sent" as MS
state "RPC Failed" as RF
CS-->WAIT:From IDLE /\nCONNECTING
CS-->WAIT:From Transient\nFailure with\nWait-for-Ready
WAIT-->CS:State Change
CS-->MS: From READY
CS-->RF: From Permanent failure or\nTransient Failure without\nWait-for-Ready
MS-->[*]
RF-->[*]
代替案
- RPCが一時的な障害を返すのをやめるまで、(指数バックオフで)ループします。
- これは、効率を高めるために、 `onReady` ハンドラーの実装と組み合わせることができます*(これをサポートする言語の場合)*。
- すぐに失敗させたいので、待機することで回避できた可能性のある失敗を受け入れます。
言語サポート
言語 | 例 |
---|---|
Java | Javaの例 |
Go | Goの例 |
Python | Pythonの例 |
最終更新日:2023年8月22日: 修正:準備完了を待つドキュメントページのGoの例のURLエラー (#1179) (007035b)