クラスタレシーバーオブジェクト

目次

はじめに

レシーバーコンポーネントは、クラスタメッセージの受信を担当します。設定を通して気づかれるかもしれませんが、メッセージの受信と送信は2つの異なるコンポーネントであり、これは他の多くのフレームワークとは異なりますが、メッセージの送信方法と受信方法のロジックを分離するという良い理由があります。
レシーバーはTomcatのコネクターと非常によく似ており、受信クラスタメッセージ用のスレッドプールの基盤です。レシーバーは単純ですが、受信トラフィックのすべてのソケット設定はここで管理されます。

レシーバー

レシーバーは、非ブロッキングの org.apache.catalina.tribes.transport.nio.NioReceiver レシーバーをサポートしています。
非ブロッキングレシーバーを使用すると、非常に限られたスレッド数で多数のメッセージを処理できます。通常、小規模クラスタではクラスタ内のノードごとに1つのスレッドを使用することが推奨され、メッセージの頻度とハードウェアに応じて、最適なスレッド数が特定の数でピークに達することを発見するでしょう。

属性

共通属性

属性説明
classNameレシーバーコンポーネントの実装です。org.apache.catalina.tribes.transport.nio.NioReceiverはTomcatによって提供されます。
address受信トラフィックをリッスンするアドレス(ネットワークインターフェース)です。バインドアドレスと同じです。デフォルト値はautoで、java.net.InetAddress.getLocalHost().getHostAddress()に変換されます。
direct指定可能な値はtrueまたはfalseです。ソケットからデータを読み取る際にレシーバーが直接バイトバッファを使用するようにしたい場合は、trueに設定します。
port受信データ用のリッスンポートです。デフォルト値は4000です。ポートの競合を避けるため、レシーバーはport <= bindPort < port+autoBindの範囲内で自動的に空いているポートにバインドします。例えば、ポートが4000で、autoBindが10に設定されている場合、レシーバーは4000-4009の範囲で最初に利用可能なポートでサーバーソケットを開きます。
autoBindデフォルト値は100です。ポートの競合を自動的に避けたい場合、この値を使用します。クラスタレシーバーはport属性のポートでサーバーソケットを開こうとし、その後、autoBind回数だけ試行します。
securePortセキュアなリッスンポートです。このポートはSSLが有効です。この属性が省略された場合、SSLポートは開かれません。デフォルト値は未設定で、SSLソケットが利用できないことを意味します。
udpPortUDPリッスンポートです。この属性が省略された場合、UDPポートは開かれません。デフォルト値は未設定で、UDPリスナーが利用できないことを意味します。
selectorTimeoutNioReceiverでのポーリングタイムアウトのミリ秒単位の値です。以前のJDKバージョンには、セレクターが起動しないバグがありましたが、これらはすべて解消されているはずです。デフォルト値は非常に高い5000ミリ秒です。
maxThreadsレシーバースレッドプール内の最大スレッド数です。デフォルト値は15です。この値は、クラスタ内のノード数、交換されるメッセージ数、および実行しているハードウェアに合わせて調整してください。値が高いほど効率が良いとは限らないため、独自のテスト結果に基づいてこの値を調整してください。
minThreadsレシーバーが起動したときに作成される最小スレッド数です。デフォルト値は6です。
maxIdleTimeアイドルスレッドが終了するまでの最大ミリ秒数です。デフォルト値は60000ミリ秒です。
ooBInlineソケットのOOBINLINEオプションのブール値です。指定可能な値はtrueまたはfalseです。
rxBufSize受信ソケット上のレシーバーバッファサイズです。値はバイト単位で、デフォルト値は65536バイトです。
txBufSize受信ソケット上の送信バッファサイズです。値はバイト単位で、デフォルト値は25188バイトです。
udpRxBufSizeデータグラムソケット上の受信バッファサイズです。デフォルト値は25188バイトです。
udpTxBufSizeデータグラムソケット上の送信バッファサイズです。デフォルト値は65536バイトです。
soKeepAliveソケットのSO_KEEPALIVEオプションのブール値です。指定可能な値はtrueまたはfalseです。
soLingerOnSO_LINGERソケットオプションを使用するかどうかを決定するブール値です。指定可能な値はtrueまたはfalseです。デフォルト値はtrueです。
soLingerTimeSO_LINGERソケットオプションの時間値を設定します。値は秒単位で、デフォルト値は3秒です。
soReuseAddressソケットのSO_REUSEADDRオプションのブール値です。指定可能な値はtrueまたはfalseです。
tcpNoDelayソケットのTCP_NODELAYオプションのブール値です。指定可能な値はtrueまたはfalseです。デフォルト値はtrueです。
timeoutソケットにSO_TIMEOUTオプションを設定します。値はミリ秒単位で、デフォルト値は3000ミリ秒です。
useBufferPoolキャッシュされたorg.apache.catalina.tribes.io.XByteBufferオブジェクトの共有バッファプールを使用するかどうかのブール値です。trueに設定すると、チャネルを介してメッセージを渡すために使用されるXByteBufferは、リクエストの終了時にリサイクルされます。これは、チャネル内のインターセプターが、org.apache.catalina.tribes.ChannelInterceptor#messageReceivedメソッドの終了後もオブジェクトへの参照を維持してはならないことを意味します。

NioReceiver

BioReceiver