14.4. Netty トランスポートの設定
HornetQ は、Netty の高パフォーマンスで低レベルのネットワークライブラリを使用します。
Netty トランスポートは、古い (ブロッキング) Java IO、NIO (非ブロッキング)、TCP ソケット、SSL、HTTP、または HTTPS を使用するよう設定できます。サーブレットトランスポートも提供されます。
14.4.1. Netty TCP の設定
Netty TCP は、単純な暗号化されていない TCP ソケットベースのトランスポートです。Netty TCP は、ブロッキング Java Asynchronous IO (AIO) または非ブロッキング Java NIO (NIO) を使用するよう設定できます。NIO は、サーバーサイドの同時接続に対して推奨されます。ただし、多くの同時接続が必要でない場合、AIO は優れたレイテンシーを提供できます。
警告
信頼できないネットワークで接続を実行している場合は、代わりに SSL または HTTPS を検討してください。
重要
非ブロッキングメッセージが送信された場合は、これらのメッセージが、呼び出し側スレッドが完了した後にサーバーに到着することがあります。つまり、セキュリティーコンテキストが削除されています。この場合は、メッセージをブロッキングメッセージとして送信する必要があります。
Netty TCP トランスポートでは、すべての接続はクライアントサイドから開始されます。これは、ファイアウォールポリシーで接続を 1 方向にのみ開始することが許可されている場合に役に立ちます。
すべての有効な Netty トランスポートキーは
org.hornetq.core.remoting.impl.netty.TransportConstants
で定義されます。アクセプターとコネクターでは、ほとんどのパラメーターを使用できます。一部はアクセプターでのみ動作します。単純な TCP のために Netty を設定するために、以下のパラメーターを使用できます。
use-nio
true
の場合は、NIO が使用されます。false
の場合は、AIO が使用されます。デフォルト値はクライアントサイドとサーバーサイドの両方でfalse
です。サーバーが多くの同時接続を処理する必要がある場合は、NIO が推奨されます。これは、1 つの接続ごとに 1 つのスレッドが保持され、AIO よりも多くの同時接続にスケーリングできるためです。サーバーが多くの同時接続を処理する必要がない場合、AIO は優れたパフォーマンスを提供できます。host
- 接続する (コネクターの場合) またはリッスンする (アクセプターの場合) ホスト名または IP アドレス。デフォルト値は
localhost
です。重要
この変数のデフォルト値はlocalhost
です。これは、リモートノードからアクセスできず、サーバーが受信接続を受け入れるよう変更する必要があります。アクセプターは、複数のカンマ区切りのホストまたは IP アドレスで設定できます。コネクターに対して複数のアドレスは有効ではありません。0.0.0.0
の場合は、ホストのすべてのネットワークインターフェースが受け入れられます。 port
- 接続する (コネクターの場合) またはリッスンする (アクセプターの場合) ポートを指定します。デフォルト値は
5445
です。 tcp-no-delay
true
の場合、Nagle のアルゴリズムが有効になります。デフォルト値はtrue
です。tcp-send-buffer-size
- TCP 送信バッファーのサイズを定義します (バイト単位)。デフォルト値は
32768
(32 キロバイト) です。TCP バッファーサイズはネットワークの帯域幅とレイテンシーに応じて調整する必要があります。バイト単位のバッファーサイズは 1 秒あたりのバイト数に秒単位の Network Round-Trip-Time (RTT) を掛けた数の帯域幅と等しくなる必要があります。RTT は、ping ユーティリティーを使用して測定できます。高速なネットワークが必要な場合は、デフォルト値からバッファーサイズを増やすことができます。 tcp-receive-buffer-size
- TCP 受信バッファーのサイズを定義します (バイト単位)。デフォルト値は
32768
(32 キロバイト) です。 batch-delay
- HornetQ は、書き込み操作をバッチに最大
batch-delay
ミリ秒格納するよう設定できます。これにより、非常に小さいメッセージの場合に全体のスループットが向上しますが、メッセージ転送の平均レイテンシーが大きくなります。デフォルト値は0
ミリ秒です。 direct-deliver
- メッセージがサーバに到着し、コンシューマーに配信されると、デフォルトで、メッセージが到着した異なるスレッドで配信が行われます。これにより、全体のスループットが最大になり、スケーラビリティーが提供されます (特にマルチコアマシンにおいて)。ただし、必要なコンテキストスイッチのため、レイテンシーが追加されます。レイテンシーを小さくするには (この場合、スループットが小さくなることがあります)、
direct-deliver
をtrue
(デフォルト値) に設定します。スループットを最大にするには、false
に設定します。 nio-remoting-threads
- NIO を使用するよう設定された場合、デフォルトで HornetQ は、
Runtime.getRuntime().availableProcessors()
により報告されたコア (またはハイパースレッド) としてスレッドの数の 3 倍の数を使用して受信パケットを処理します。nio-remoting-threads
はこれを上書きし、使用するスレッドの数を定義します。デフォルト値は-1
であり、Runtime.getRuntime().availableProcessors()
の値の 3 倍の数を表します。