第34章 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 モードを使用して、単一のトランザクションでメッセージを送受信します。

    単一のトランザクションでメッセージをバッチ処理することで、JBoss EAP に統合された ActiveMQ Artemis サーバーで必要なネットワークラウンドトリップは、送信または受信ごとではなく、コミット時に 1 つのみになります。