グレースフルシャットダウンは、サーバー側の操作中にメッセージ損失やクライアントエラーを防ぐための ApsaraMQ for RocketMQ の組み込み機能です。サーバーがバージョンのリリース、再起動、またはメンテナンスを行う際に、ApsaraMQ for RocketMQ は保護メカニズムを有効化し、クライアントの突然の切断を防ぎ、ビジネスの継続性を確保します。
保護メカニズム
サーバー側の書き込み中断
ストレージノードが再起動する前に、サーバーはそのノードへの書き込み操作を一時的に中断します。ノードに新しいメッセージが書き込まれなくなった後にのみ、再起動が続行されます。これにより、クライアントによって既に送信されたすべてのメッセージが正常に保存されることが保証されます。
GOAWAY によるコネクションドレイニング
ApsaraMQ for RocketMQ サーバーは、HTTP/2 プロトコルで定義されたGOAWAYフレームを使用して、コネクションを正常にクローズするか、コネクションが間もなくクローズされることをクライアントに通知します。このメカニズムは、サーバーとクライアント間のコネクション終了を調整し、進行中のリクエストが中断されるのを防ぎ、システムの安定性を確保します。
影響
プロデューサー:すべてのメッセージ送信リクエストは正常に処理されます。グレースフルシャットダウンのプロセス中に送信の失敗は発生しません。
コンシューマー:ほとんどのメッセージは正常に消費されます。まれに、移行中にコンシューマーオフセットのコミットが失敗するため、再起動中のストレージノードに滞留している少数のメッセージが再配信される可能性があります。
SDK バージョンの要件
グレースフルシャットダウンを使用するには、クライアント SDK が以下の最小バージョン要件を満たしている必要があります。
Java 用 SDKJava 用 SDKGo 用 SDKPython 用 SDKC++ 用 SDKC# 用 SDK
| 言語 | 最小バージョン | リファレンス |
| Java (gRPC プロトコル) | 5.0.7 | SDK for Java |
| Java (Remoting プロトコル) | 5.3.1 | SDK for Java |
| Go | 5.1.0-rc.1 | SDK for Go |
| Python | 5.0.4 | SDK for Python |
| C++ | 5.0.2 | SDK for C++ |
| C# | 5.1.0 | SDK for C# |
| Node.js | 1.0.1 | SDK for Node.js |
注意事項
クライアント側の設定は不要:グレースフルシャットダウンはサーバー側の機能です。クライアント SDK を対応バージョンにアップグレードするだけで済みます。
べき等性を考慮したコンシューマーの設計:短い移行期間中にコンシューマーオフセットのコミットが失敗すると、少数のメッセージが再配信される可能性があります。コンシューマーのロジックが同じメッセージを複数回安全に処理できるように設計してください。
SDK バージョンの積極的な監視:新しいサービスを追加したり、依存関係を更新したりする際は、お使いの ApsaraMQ for RocketMQ クライアント SDK が、グレースフルシャットダウンの最小バージョン要件を引き続き満たしていることを確認してください。