20.2. Java Message Service (JMS) のチューニング
JMS API を使用する場合は、パフォーマンスを改善するためのヒントについて、以下の情報を確認してください。
メッセージ ID を無効にします。
メッセージ ID が必要ない場合は、
MessageProducerクラスでsetDisableMessageID()メソッドを使用して無効にします。値をtrueに設定すると、一意の ID を作成する必要がなくなり、メッセージのサイズが小さくなります。メッセージのタイムスタンプを無効にします。
メッセージのタイムスタンプが必要ない場合は、
MessageProducerクラスでsetDisableMessageTimeStamp()メソッドを使用して無効にします。値をtrueに設定すると、タイムスタンプ作成のオーバーヘッドがなくなり、メッセージのサイズが減少します。ObjectMessageを使用しません。ObjectMessageは、シリアライズされたオブジェクトを含むメッセージを送信するために使用されます。つまり、メッセージの本文 (ペイロード) が、バイトストリームとしてネットワーク経由で送信されます。Java シリアル化形式は、たとえ小さなオブジェクトであってもサイズが非常に大きく、ネットワーク上でかなりのスペースを占有します。また、カスタムマーシャリング手法と比較すると低速です。ObjectMessageは、他のメッセージタイプの 1 つを使用できない場合にのみ使用します。たとえば、ランタイムまでペイロードタイプがわからない場合に使用します。AUTO_ACKNOWLEDGEを使用しません。コンシューマーの確認応答モードの選択は、ネットワーク経由で確認応答メッセージを送信することにより発生する追加のオーバーヘッドとトラフィックのために、パフォーマンスに影響します。
AUTO_ACKNOWLEDGEでは、クライアントで受け取るメッセージごとにサーバーから確認応答が送信される必要があるため、このオーバーヘッドが発生します。可能であれば、遅延方式でメッセージを確認するDUPS_OK_ACKNOWLEDGE、またはクライアントコードがメソッドを呼び出してメッセージを確認するCLIENT_ACKNOWLEDGEを使用します。または、トランザクションセッションで 1 つの確認応答またはコミットを使用して、多数の確認応答をバッチ処理します。永続メッセージを使用しません。
デフォルトでは、JMS メッセージは永続化されます。永続メッセージが必要ない場合は、それらを non-durable に設定します。永続メッセージはストレージに永続化されるため、追加のオーバーヘッドが発生します。
TRANSACTED_SESSIONモードを使用して、単一のトランザクションでメッセージを送受信します。メッセージを単一のトランザクションでバッチ処理することにより、AMQ Broker では、送信または受信のたびにではなく、コミット時に 1 回のネットワークラウンドトリップのみが必要になります。