18.2.2. Netty TCP の設定
Netty TCP は暗号化されていない単純な TCP ソケットベースのトランスポートです。Netty TCP は、古いブロッキング Java IO または非ブロッキング Java NIO を使用するよう設定できます。多くの同時接続でスケーラビリティーを向上するには、サーバー側で Java NIO を使用することが推奨されます。同時接続の数が Java 古い IO が少ないと、NIO よりもレイテンシーが良くなります。
Netty TCP は暗号化されていないため、信頼できないネットワーク上で接続を実行する場合には推奨されません。Netty TCP トランスポートでは、すべての接続がクライアント側から開始されます。
設定例は、HornetQ の JBoss EAP 6 実装がアクセプターおよびコネクター設定でソケットバインディングを使用する方法を示しています。これは、HornetQ のスタンドアロンバージョンとは異なり、特定のホストおよびポートを宣言する必要があります。
例18.1 デフォルトの EAP 設定からの Netty TCP の設定例
<connectors> <netty-connector name="netty" socket-binding="messaging"/> <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> </netty-connector> <in-vm-connector name="in-vm" server-id="0"/> </connectors> <acceptors> <netty-acceptor name="netty" socket-binding="messaging"/> <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> <param key="batch-delay" value="50"/> <param key="direct-deliver" value="false"/> </netty-acceptor> <in-vm-acceptor name="in-vm" server-id="0"/> </acceptors>
下表は Netty TCP 設定プロパティーの説明になります。
プロパティー | デフォルト | 説明 |
---|---|---|
batch-delay | 0 ミリ秒 | パケットをトランスポートに書き込む前に、HornetQ は batch-delay ミリ秒の最大書き込みを一括処理するよう設定できます。これにより、メッセージ転送の平均待ち時間が長くなり、非常に小さいメッセージのスループットの合計が増加します。 |
direct-deliver | true | メッセージがサーバーに到達し、待機しているコンシューマーに配信されると、デフォルトでは、メッセージが到達した同じスレッドで配信が実行されます。これにより、メッセージが比較的小さく、コンシューマーの数が少ない環境では適切な待ち時間になりますが、スループットと待ち時間は低減されます。スループットを最大限にする場合は、このプロパティーを「false」に設定します。 |
local-address | [使用可能なローカルアドレス] | Netty コネクターでは、リモートアドレスへの接続時にクライアントが使用するローカルアドレスを指定するために使用されます。ローカルアドレスが指定されていない場合、コネクターは利用可能なローカルアドレスを使用します。 |
local-port | 0 | Netty コネクターでは、リモートアドレスへの接続時にクライアントが使用するローカルポートを指定するために使用されます。local-port のデフォルト(0)が使用される場合、コネクターはシステムが一時ポートを取得できるようにします。有効なポートは 0 から 65535 です。 |
nio-remoting-threads | -1 | NIO を使用するように設定されている場合、デフォルトでは受信パケットを処理するために Runtime.getRuntime().availableProcessors()によって報告されるコア(またはハイパースレッド)の数の 3 倍のスレッドを使用します。この値をオーバーライドするには、スレッド数にカスタム値を設定します。 |
tcp-no-delay | true | true の場合、Nagle アルゴリズムが有効になります。このアルゴリズムによりネットワーク上で送信されるパケット数を減らすことで、TCP/IP ネットワークの効率を向上します。 |
tcp-send-buffer-size | 32768 バイト | このパラメーターは TCP が送信するバッファーのサイズ (バイト単位) を決定します。 |
tcp-receive-buffer-size | 32768 バイト | このパラメーターは TCP が受信するバッファーのサイズ (バイト単位) を決定します。 |
use-nio | false | true の場合、ノンブロッキング NIO が使用されます。false に設定された場合、古いブロッキング Java IO が使用されます。多くの同時接続を処理するには、非ブロッキング Java NIO を使用する必要があります。それ以外の場合は、古い(ブロッキング)IO になります。 |
use-nio-global-worker-pool | false | このパラメーターにより、すべての JMS 接続で Java スレッドの 1 つのプールが共有されます(各コネクションに独自のプールがあるわけではありません)。これは、オペレーティングシステムのプロセスの最大数を使い切らないようにするためのものです。 |
重要
use-nio
を true に設定した場合には、use-nio-global-worker-pool
パラメーターを使用して、マシンが多数の接続を作成するリスクを最小限に抑え、OutOfMemory
エラーが発生する可能性があります。
<netty-connector name="netty" socket-binding="messaging"> <param key="use-nio" value="true"/> <param key="use-nio-global-worker-pool" value="true"/> </netty-connector>
注記
Netty TCP プロパティーはすべてのタイプのトランスポートに対して有効です。