付録A アクセプターおよびコネクター設定パラメーター

以下の表は、Netty ネットワーク接続の設定に使用される利用可能なパラメーターの一部を示しています。パラメーターとその値は、接続文字列の URI に追加されます。詳細については 、ネットワーク接続: アクセプターとコネクター を参照してください。各テーブルは、名前別にパラメーターを一覧表示し、アクセプターまたはコネクターと使用できるか、またはその両方とともに使用するかをメモします。たとえば、アクセプターでしか使用するなど、一部のパラメーターを使用できます。

注記

すべての Netty パラメーターは org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants クラスで定義されます。カスタマーポータル では、ソースコードをダウンロードできます。

表A.1 Netty TCP パラメーター

パラメーター用途説明

batchDelay

両方

パケットをアクセプターまたはコネクターに書き込む前に、ブローカーは batchDelay ミリ秒の書き込みをバッチ処理するよう設定できます。これにより、非常に小さなメッセージで全体的なスループットが増える可能性があります。これは、メッセージ転送の平均レイテンシーが増加するため、経費します。デフォルト値は 0 ミリ秒です。

connectionsAllowed

アクセプター

アクセプターが許可する接続の数を制限します。この制限に達すると、DEBUG レベルのメッセージがログに出力され、接続は拒否されました。使用中のクライアントのタイプによって、接続が拒否されたときに何が起こるかが決まります。

directDeliver

両方

メッセージがサーバーに到達し、待機しているコンシューマーに配信されると、デフォルトでは、メッセージが到達した同じスレッドで配信が実行されます。これにより、メッセージが比較的小さく、コンシューマーの数が少ない環境では適切な待ち時間が発生しますが、特にマルチコアマシンではスループットとスケーラビリティー全体のコストが発生します。レイテンシーを最小限に抑え、スループットが低い場合は、directDeliver のデフォルト値 ( true ) を使用できます。レイテンシーに若干ヒットするが、スループットが最も高い場合は directDeliverfalse に設定します。

handshake-timeout

アクセプター

承認されていないクライアントが多数の接続を開かないようにし、開いた状態にします。各接続にはファイルハンドルが必要なため、他のクライアントでは利用できないリソースを消費します。

このタイムアウトにより、接続が認証されずにリソースを消費できる時間を制限します。接続が認証されると、リソース制限設定を使用してリソース消費を制限できます。

デフォルト値は 10 秒に設定されます。これは、他の整数値に設定できます。このオプションをオフにするには、0 または負の整数に設定します。

タイムアウト値を編集したら、ブローカーを再起動する必要があります。

localAddress

コネクター

リモートアドレスへの接続時にクライアントが使用するローカルアドレスを指定します。通常、これはアプリケーションサーバーで使用され、Embeddent 接続に使用されるアドレスを制御するために Embedded を実行する場合に使用されます。local-address が設定されていない場合、コネクターは利用可能なローカルアドレスを使用します。

localPort

コネクター

リモートアドレスへの接続時にクライアントが使用するローカルポートを指定します。通常、これはアプリケーションサーバーで使用され、Embeddent 接続に使用されるポートを制御するために Embedded を実行する場合に使用されます。デフォルトに (0) が使用される場合、コネクターによりシステムで一時ポートを取得することが許可されます。有効なポートは 0 から 65535 です。

nioRemotingThreads

両方

NIO を使用するように設定されている場合には、 ブローカーはデフォルトで受信パケットを処理するために Runtime.getRuntime().availableProcessors() によって報告されるコア (または hyper-threads) の数の 3 倍のスレッドを使用します。この値をオーバーライドする場合は、このパラメーターを指定してスレッド数を設定できます。このパラメーターのデフォルト値は -1 です。これは、Runtime.getRuntime().availableProcessors() * 3 から派生する値を使用することを意味します。

tcpNoDelay

両方

true の場合、Nagle アルゴリズム が有効になります。これは、Java(クライアント) ソケットオプション です。デフォルト値は true です。

tcpReceiveBufferSize

両方

TCP 受信バッファーのサイズ ( バイト単位 ) を決定します。デフォルト値は 32768 です。

tcpSendBufferSize

両方

TCP 送信バッファーのサイズ ( バイト単位 ) を決定します。デフォルト値は 32768 です。

TCP バッファーサイズは、ネットワークの帯域幅およびレイテンシーに従って調整する必要があります。

つまり、TCP の送信/受信バッファーサイズは以下のように計算する必要があります。

buffer_size = bandwidth * RTT

帯域幅とは秒単位で、ネットワークラウンドトリップタイム (RTT) は秒単位になります。RTT は、ping ユーティリティーを使用して簡単に測定できます。

高速ネットワークでは、デフォルトからバッファーサイズを増やす必要がある場合があります。

表A.2 Netty HTTP パラメーター

パラメーター用途説明

httpClientIdleTime

アクセプター

接続を維持するために空の HTTP 要求を送信する前にクライアントがアイドル状態でいられる期間。

httpClientIdleScanPeriod

アクセプター

アイドル状態のクライアントに対してスキャンを行う頻度 (ミリ秒単位)。

httpEnabled

アクセプター

不要になりました。単一ポートがサポートされる場合、ブローカーは HTTP が使用されているかどうかを自動的に検出し、それ自体を設定するようになりました。

httpRequiresSessionId

両方

true の場合、クライアントは最初の呼び出し後にセッション ID を受け取るまで待機します。HTTP コネクターがサーブレットアクセプターに接続する場合に使用されます。この設定は推奨されません。

httpResponseTime

アクセプター

接続を維持するために空の HTTP 応答を送信する前にサーバーが待機する時間。

httpServerScanPeriod

アクセプター

応答が必要なクライアントに対してスキャンを行う頻度 (ミリ秒単位)。

表A.3 Netty TLS/SSL パラメーター

パラメーター用途説明

enabledCipherSuites

両方

SSL 通信に使用される暗号スイートのコンマ区切りリスト。デフォルト値は空で、JVM のデフォルトが使用されます。

enabledProtocols

両方

SSL 通信に使用されるプロトコルのコンマ区切りリスト。デフォルト値は空で、JVM のデフォルトが使用されます。

forceSSLParameters

コネクター

このコネクターの SSL コンテキストを設定するために、JVM システムプロパティー ( javax.net.ssl および AMQ Broker システムプロパティーの両方を含む ) ではなく、コネクターのパラメーターとして設定される SSL 設定を使用するかどうかを制御します。

有効な値は true または false です。デフォルト値は false です。

keyStorePassword

両方

アクセプターで使用されると、サーバー側のキーストアのパスワードになります。

コネクターで使用されると、クライアント側のキーストアのパスワードになります。双方向 SSL(つまり相互認証) を使用している場合は、これはコネクターにのみ関係します。この値はサーバー上で設定可能ですが、ダウンロードしてクライアントで使用します。クライアントでサーバーの設定と異なるパスワードを使用する必要がある場合は、カスタムの javax.net.ssl.keyStorePassword システムプロパティーまたは ActiveMQ 固有の org.apache.activemq.ssl.keyStorePassword システムプロパティーを使用してサーバー側の設定をオーバーライドできます。ActiveMQ 固有のシステムプロパティーは、クライアントの別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に便利です。

keyStorePath

両方

アクセプターで使用される場合は、サーバーの証明書を保持するサーバーの SSL キーストアへのパスになります ( 自己署名または認証局によって署名されているかどうか )。

コネクターで使用される場合、これはクライアント証明書を保持するクライアント側の SSL キーストアへのパスとなります。双方向 SSL(つまり相互認証) を使用している場合は、これはコネクターにのみ関係します。この値はサーバー上で設定されますが、ダウンロードしてクライアントで使用します。クライアントでサーバーの設定と異なるパスを使用する必要がある場合は、カスタムの javax.net.ssl.keyStore システムプロパティーまたは ActiveMQ 固有の org.apache.activemq.ssl.keyStore システムプロパティーのいずれかを使用してサーバー側の設定をオーバーライドできます。ActiveMQ 固有のシステムプロパティーは、クライアントの別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に便利です。

needClientAuth

アクセプター

このプロパティーは、このアクセプターに接続するクライアントに双方向 SSL が必要であることを伝えます。有効な値は true または false です。デフォルト値は false です。

sslEnabled

両方

SSL を有効にするには true にする必要があります。デフォルト値は false です。

trustManagerFactoryPlugin

両方

org.apache.activemq.artemis.api.core.Trust Manager Factory Pluginを実装するクラスの名前を定義します。

これは、javax.net.ssl.TrustManagerFactory を返す単一のメソッドを持つ簡単なインターフェイスです。TrustManagerFactory は、基礎となる javax.net.ssl.SSLContext が初期化されるときに使用されます。これにより、ブローカーおよびクライアントの信頼について詳細にわたるカスタマイズが可能になります。

trustManagerFactoryPlugin の値は、トラストマネージャーに適用される他のすべての SSL パラメーターよりも優先されます ( 例 : trustAlltruststoreProvidertruststorePathtruststorePassword、および crlPath )。

ブローカーの Java クラスパスに、指定したプラグインを配置する必要があります。BROKER_INSTANCE_DIR/lib ディレクトリーは、デフォルトでクラスパスに含まれているため、使用することができます。

trustStorePassword

両方

アクセプターで使用されると、サーバー側のトラストストアのパスワードになります。双方向 SSL(つまり相互認証) を使用している場合、アクセプターにのみ関係します。

コネクターで使用されると、クライアント側のトラストストアのパスワードになります。この値はサーバー上で設定可能ですが、ダウンロードしてクライアントで使用します。クライアントがサーバーで設定されているものとは異なるパスワードを使用する必要がある場合は、通常のjavax.net.ssl.trust Store Passwordシステムプロパティーまたは ActiveMQ 固有のorg.apache.activemq.ssl.trust Store Passwordシステムプロパティーを使用して、サーバー側の設定を上書きできます。ActiveMQ 固有のシステムプロパティーは、クライアントの別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に便利です。

sniHost

両方

アクセプターで使用される場合、sniHost は受信 SSL 接続の server_name 拡張と一致するために使用される正規表現です ( この拡張機能に関する詳細は、https://tools.ietf.org/html/rfc6066 を参照してください )。名前が一致しない場合、アクセプターへの接続は拒否されます。この場合、WARN メッセージが記録されます。

受信接続に server_name 拡張子が含まれていない場合、接続は受け入れられます。

コネクターで使用されると、SSL 接続の server_name 拡張子に sniHost 値が使用されます。

sslProvider

両方

JDKOPENSSL の間で SSL プロバイダーを変更するために使用されます。デフォルトは JDK です。

OPENSSL に設定した場合は、クラスパスに netty-tcnative を追加して、ネイティブにインストールした OpenSSL を使用できます。

このオプションは、OpenSSL でサポートされ、JDK プロバイダーでサポートされていない、特別な ciphersuite-elliptic 曲線の組み合わせを使用する場合に便利です。

trustStorePath

両方

アクセプターで使用される場合、これはサーバーが信頼するすべてのクライアントのキーを保持するサーバー側の SSL キーストアへのパスとなります。双方向 SSL(つまり相互認証) を使用している場合、アクセプターにのみ関係します。

コネクターで使用される場合は、クライアント側の SSL/TLS キーストアへのパスとなります。これは、クライアントが信頼するすべてのサーバーの公開鍵を保持します。この値はサーバー上で設定可能ですが、ダウンロードしてクライアントで使用します。クライアントでサーバーの設定と異なるパスを使用する必要がある場合は、カスタムの javax.net.ssl.trustStore システムプロパティーまたは ActiveMQ 固有の org.apache.activemq.ssl.trustStore システムプロパティーのいずれかを使用してサーバー側の設定をオーバーライドできます。ActiveMQ 固有のシステムプロパティーは、クライアントの別のコンポーネントがすでに標準の Java システムプロパティーを使用している場合に便利です。

useDefaultSslContext

コネクター

コネクターが (SSLContext.getDefault() を介して ) 「default」SSL コンテキストを使用できるようにします。これは、(SSLContext.setDefault(SSLContext) を介して) クライアントによってプログラム的に設定できます。

このパラメーターが true に設定されている場合、sslEnabled 以外の SSL 関連のパラメーターはすべて無視されます。有効な値は true または false です。デフォルト値は false です。

verifyHost

両方

アクセプターで使用されると、接続しているクライアントの SSL 証明書の CN がホスト名と比較され、それらが一致することを確認します。これは双方向 SSL でのみ便利です。

コネクターで使用されると、サーバーの SSL 証明書の CN がホスト名と比較され、それらが一致することを確認します。これは一方向および双方向 SSL の両方に役立ちます。

有効な値は true または false です。デフォルト値は false です。

wantClientAuth

アクセプター

このアクセプターに接続するクライアントに対して、双方向 SSL が要求されているが、必須ではないことを伝えます。有効な値は true または false です。デフォルト値は false です。

needClientAuthtrue に設定すると、そのプロパティーが優先され wantClientAuth は無視されます。