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-delivertrue (デフォルト値) に設定します。スループットを最大にするには、false に設定します。
nio-remoting-threads
NIO を使用するよう設定された場合、デフォルトで HornetQ は、Runtime.getRuntime().availableProcessors() により報告されたコア (またはハイパースレッド) としてスレッドの数の 3 倍の数を使用して受信パケットを処理します。nio-remoting-threads はこれを上書きし、使用するスレッドの数を定義します。デフォルト値は -1 であり、Runtime.getRuntime().availableProcessors() の値の 3 倍の数を表します。