43.2. JMS のチューニング
JMS API を使用している場合は、以下の領域で最適化を行えます。
- メッセージ ID を無効にします。
MessageProducerクラスのsetDisableMessageID()メソッドを使用してメッセージを無効にします (必要ない場合)。これにより、メッセージのサイズが削減され、一意の ID を作成するオーバーヘッドが回避されます。 - メッセージタイムスタンプを無効にします。
MessageProducerクラスのsetDisableMessageTimeStamp()メソッドを使用して必要でないメッセージタイムスタンプを無効にします。 ObjectMessageを回避します。ObjectMessageは便利ですが、コストがかかります。ObjectMessageのボディーは Java シリアル化を使用してバイトにシリアル化します。小さいオブジェクトの Java シリアル化形式であっても冗長になり、サーバートラフィックが増加します。また、Java シリアル化はカスタムマーシャリングテクニックと比較して低速です。他のいずれかのメッセージタイプが適切でない場合 (たとえば、ペイロードのタイプが実行時まで不明な場合) のみ、ObjectMessageを使用します。AUTO_ACKNOWLEDGEを回避します。AUTO_ACKNOWLEDGEモードは、クライアントで受け取る各メッセージに対してサーバーから送信される承認を必要とします。つまり、ネットワークでトラフィックが増加します。可能な場合は、DUPS_OK_ACKNOWLEDGE、CLIENT_ACKNOWLEDGE、またはトランザクションセッションを使用して、1 つの承認/コミットで多くの承認をバッチ処理します。- 耐性メッセージを回避します。デフォルトでは、JMS メッセージは耐性です。実際には耐性メッセージが必要ない場合は、メッセージを非耐性に設定します。耐性メッセージの場合は、メッセージをストレージに永続化するオーバーヘッドが大幅に増加します。
- 1 つのトランザクションで多くの送信または承認をバッチ処理します。HornetQ は各送信時または承認時ではなくコミット時にネットワークラウンドトリップのみを必要とします。