クラスタ送信者オブジェクト

目次

はじめに

チャネル送信者コンポーネントは、ネットワークを介して送信クラスタメッセージを配信する役割を担います。デフォルトの実装であるorg.apache.catalina.tribes.transport.ReplicationTransmitterでは、送信者は、実際の配信メカニズムを実装するかなり複雑な<Transport>コンポーネントの周りに多くのロジックを持たない、かなり空っぽのシェルです。

同時並行配信

デフォルトのtransport実装であるorg.apache.catalina.tribes.transport.nio.PooledParallelSenderでは、Apache Tribesは「同時並行配信 (Concurrent Parallel Delivery)」と呼ぶものを実装しています。これは、1つのメッセージを同時に複数の宛先に送信できる(並行)、および2つのメッセージを同時に同じ宛先に配信できる(同時)ことを意味します。これら2つを組み合わせると、「同時並行配信」が実現します。

これはいつ役立つのでしょうか?考えられる最も簡単な例は、コードの一部が10MBのメッセージ(デプロイ中のwarファイルなど)を送信しており、小さな10KBのメッセージ(セッションのレプリケーションなど)を送り込む必要がある場合です。この場合、10MBのメッセージが完了するのを待つ必要はなく、別のスレッドが同時に小さなメッセージの送信をプッシュします。現在、中断、一時停止、または優先順位付けのメカニズムはありませんが、まもなく利用可能になる予定です。

ネストされた要素

ネストされた要素<Transport>は必須ではありませんが、送信メッセージのすべてのソケットオプションを設定する場所であるため、推奨されます。その属性については以下を参照してください。

属性

共通送信者属性

属性説明
className必須。利用可能な実装はorg.apache.catalina.tribes.transport.ReplicationTransmitterのみです。

共通トランスポート属性

属性説明
className送信者コンポーネントの実装。org.apache.catalina.tribes.transport.nio.PooledParallelSenderはTomcatによって提供されます。
rxBufSizeソケット上の受信バッファサイズ。デフォルト値は25188バイトです。
txBufSizeソケット上の送信バッファサイズ。デフォルト値は65536バイトです。
udpRxBufSizeデータグラムソケット上の受信バッファサイズ。デフォルト値は25188バイトです。
udpTxBufSizeデータグラムソケット上の送信バッファサイズ。デフォルト値は65536バイトです。
directBuffer可能な値はtrueまたはfalseです。受信側がソケットにデータを書き込む際にダイレクトバイトバッファを使用するようにしたい場合はtrueに設定します。デフォルト値はfalseです。
keepAliveCountソケットが閉じられ、次のリクエストのために再度開かれるまでにソケットを介して処理できるリクエストの数。デフォルト値は-1で、無制限を意味します。
keepAliveTime接続が開かれた後、その接続が維持されるミリ秒数。デフォルト値は-1で、無制限を意味します。
timeoutソケットのSO_TIMEOUTオプションを設定します。値はミリ秒単位で、デフォルト値は3000ミリ秒(3秒)です。このタイムアウトは、メッセージ送信試行が開始されてから転送が完了するまで適用されます。NIOソケットの場合、これは、呼び出し元がこのタイムアウト値よりも長くメッセージの送信を試みないことを保証できることを意味します。ブロッキングIO実装の場合、これはsoTimeoutに直接変換されます。
アプリケーションスレッドの戻りを保証するため、タイムアウトが発生しても再試行は行われません。
maxRetryAttemptsソケットレベルでIOExceptionを受け取った失敗したメッセージを何回再試行するか。デフォルト値は1で、一度失敗したメッセージを再試行することを意味します。言い換えれば、メッセージ送信は最大2回試行されます。1回は元の送信で、もう1回はmaxRetryAttemptsによるものです。
ooBInlineソケットのOOBINLINEオプションのブール値。可能な値はtrueまたはfalseです。
soKeepAliveソケットのSO_KEEPALIVEオプションのブール値。可能な値はtrueまたはfalseです。
soLingerOnSO_LINGERソケットオプションを使用するかどうかを決定するブール値。可能な値はtrueまたはfalseです。デフォルト値はtrueです。
soLingerTimeSO_LINGERソケットオプションの時間値を設定します。値は秒単位です。デフォルト値は3秒です。
soReuseAddressソケットのSO_REUSEADDRオプションのブール値。可能な値はtrueまたはfalseです。
soTrafficClassソケットのトラフィッククラスレベルを設定します。値は0から255の間です。デフォルト値はint soTrafficClass = 0x04 | 0x08 | 0x010;です。異なる値は java.net.Socket#setTrafficClass(int)で定義されています。
tcpNoDelayソケットのTCP_NODELAYオプションのブール値。可能な値はtrueまたはfalseです。デフォルト値はtrueです。
throwOnFailedAckブール値、デフォルト値はtrueです。trueに設定すると、リモートメンバーからネガティブACKを受信した際に、送信者はorg.apache.catalina.tribes.RemoteProcessExceptionをスローします。falseに設定すると、Tribesは肯定応答と否定応答を同じように扱い、メッセージが受信されたと見なします。

共通 PooledSender 属性

属性説明
poolSizeAからBへの同時接続の最大数。値は宛先ごとのカウントに基づきます。デフォルト値は25です。
maxWait利用可能な送信者がいない場合にsenderPoolが待機する最大ミリ秒数。デフォルト値は3000ミリ秒(3秒)です。