IBM MQ のパフォーマンス調整

多くのメッセージを処理する場合、パフォーマンスは重要な要因となります。そのため、IBM MQ コネクタのパフォーマンスを最大限に引き出せるように、次の設定を確認してください。

接続の再利用を無効化しないこと

接続の確立には多くのリソースが使用されるため、接続はできる限り再利用するようにしてください。

注意:

  • デフォルトでは、IBM MQ コネクタは積極的な caching-strategy を使用し、 できる限り多くのコンシューマとプロデューサを再利用します。この設定を少しでも変更すると、アプリケーションのパフォーマンスが低下するおそれがあるため、この設定には触れないことをお勧めします。

  • 接続キャッシュを無効化すると、アプリケーションのパフォーマンスが低下します。

同時メッセージ処理数の増大

アプリケーションのパフォーマンスを高めるための良い手段として、同じ宛先からメッセージを同時に受信するコンシューマ数を増やすという方法があります。 IBM MQ では、numberOfConsumers パラメータの設定によって簡単に行うことができます。

listener は、デフォルトでは同じ宛先に対して 4 つのコンシューマを使用しますが、実際のニーズに合わせてこの数を増やすことができます。

<ibm-mq:listener config-ref="config"
     destination="#[vars.destination]"
     numberOfConsumers="20"/>
numberOfConsumers を増やすことが、リスナのスループットを改善するための最も簡単な方法です。

クラスタ設定の最適化

クラスタで動作するアプリケーションの場合は、プライマリノード の概念と、コネクタの動作に注目してください。クラスタで動作する場合、IBM MQ listener のデフォルト設定では、どのような種類の宛先からメッセージをコンシュームする場合でも、プライマリノードでのみメッセージを受信します。

キューからメッセージをコンシュームする場合は、この設定を変更して、プライマリノードだけではなく、クラスタ内のすべてのノードからメッセージを受信するようにしてください。

これは primaryNodeOnly パラメータで行います。

<ibm-mq:listener config-ref="config"
     destination="${inputQueue}"
     primaryNodeOnly="false"/>

トピックからメッセージをコンシュームする場合は少し異なり、プライマリノードのみからメッセージを受信するというデフォルト動作は最も一般的なユースケースであるため、これによってクラスタ内で同じメッセージが複数回処理されてしまうことを防止できます。

JMS 2.0 共有サブスクリプションメカニズムを使用していて、すべてのノードからメッセージをコンシュームするようにクラスタ設定を変更したい場合も、同じように primaryNodeOnlyfalse に設定します。

<ibm-mq:listener config-ref="JMS_20_config"
      destination="${inputTopic}"
      primaryNodeOnly="false">
     <ibm-mq:consumer-type>
         <ibm-mq:topic-consumer
         shared="true"
         subscriptionName="clusteredEventListener"/>
     </ibm-mq:consumer-type>
 </ibm-mq:listener>
クラスタでキューからメッセージをリスンする場合は、primaryNodeOnly の設定を false に変更してください。
クラスタでトピックからメッセージをリスンする場合は、primaryNodeOnly の 設定を使用しないと、共有サブスクリプションメカニズムを使用しない限り、クラスタで同じメッセージを複数回処理してしまいます。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub