18.4. 非同期送信承認

非トランザクションセッションを使用し、サーバーに送信される各メッセージがサーバーに到達された保証が必要な場合は、「非トランザクションメッセージ送信の保証」 で説明されたように、サーバーがメッセージを受け取り、永続化し、応答を送り返すまで送信コールをブロックするよう HornetQ を設定できます。これは有用ですが、パフォーマンスが大幅に低下します。各送信コールは最低ネットワークラウンドトリップ (RTT) の時間、ブロックする必要があります。送信のパフォーマンスはネットワークのレイテンシーにより制限され、ネットワーク帯域幅により制限されません
これに対処するために、HornetQ は非同期送信承認と呼ばれる機能を提供します。この機能を使用すると、一方向にブロックしたり、メッセージを別のストリームで受け取ったことの承認をサーバーから非同期に取得したりせずに、メッセージを送信するよう HornetQ を設定できます。送信と送信の承認を分けることにより、システムはネットワーク RTT により制限されませんが、ネットワーク帯域幅により制限されます。結果的に、ブロックする方法を使用するよりも優れたスループットを達成できます (同時に、メッセージがサーバーに正常に到達したことが確実に保証されます)。
送信承認のウィンドウサイズは、接続ファクトリーまたはクライアントセッションファクトリーの confirmation-window-size パラメーターにより決定されます。この詳細については、32章クライアントの再接続とセッションの再割り当て を参照してください。

18.4.1. 非同期送信承認

コア API により機能を使用するには、インターフェース org.hornetq.api.core.client.SendAcknowledgementHandler を実装し、ClientSession でハンドラーインスタンスを設定します。
ClientSession を使用して通常どおりメッセージを送信します。メッセージがサーバーに到着すると、サーバーは送信の承認を非同期で送り返します。HornetQ はハンドラーの sendAcknowledged(ClientMessage message) メソッドを呼び出し、送信されたメッセージへの参照を渡します。
非同期送信承認を有効にするには、confirmation-window-size が正の整数値に設定されるようにします (バイト単位で指定)。たとえば、10485760 (10 メビバイト) になります。