Flex Gateway新着情報
Governance新着情報
Monitoring API Managerメッセージによりパフォーマンスに悪影響が及ぶことがあります。次の推奨事項は、Mule アプリケーションで JMS 用 Anypoint Connector (JMS Connector) を最大限活用するのに役立つ可能性があります。
接続の作成には多くのリソースが使用されるため、接続はできる限り再利用します。デフォルトでは、JMS Connector では、できる限り多くのコンシューマーとプロデューサーを再利用するキャッシュ戦略が使用されます。パフォーマンスの低下を避けるため、接続キャッシュは無効にしないでください。
アプリケーションのパフォーマンスを高めるには、同じ宛先からのメッセージを受信するコンシューマーの数を増やします。JMS Connector では、On New Message ソースの [Number of consumers (コンシューマー数)] 項目を設定することでコンシューマー数を増やすことができます。デフォルトでは、このソースでは、4 つのコンシューマーが同じ宛先のメッセージを同時に受信できますが、この数をニーズに最も適した数に増やすことができます。
次の例では、メッセージを同時に受信するコンシューマーの数を増やします。
Studio で、フローから [On New Message] ソースを選択します。
On New Message ソースの設定画面で、[Number of consumers (コンシューマー数)] 項目を 20
に設定します。
XML エディターでは、numberOfConsumers
設定は次のように記述されます。
<jms:listener config-ref="config" destination="#[vars.destination]" numberOfConsumers="20"/>
xml
クラスターで動作するアプリケーションの場合は、プライマリノードとコネクタの動作を考慮します。アプリケーションがクラスターで動作する場合、On New Message ソースのデフォルトの動作では、どのような種類の宛先をアプリケーションでコンシュームする場合でも、プライマリノードでのみメッセージを受信します。
キューからメッセージをコンシュームする場合、デフォルトのコネクタ動作では、プライマリノードだけではなく、クラスターのすべてのノードでメッセージを受信します。JMS Connector では、On New Message ソースの [Primary node only (プライマリノードのみ)] 項目を設定できます。コネクタでクラスター内のキューからメッセージをコンシュームする場合、[Primary node only (プライマリノードのみ)] 項目を選択しないでください。これはデフォルトで false
になります。
次の例では、すべてのノードでメッセージを受信するようにコネクタを設定します。
Studio で、フローから [On New Message] ソースを選択します。
[Advanced (詳細)] タブで [Primary node only (プライマリノードのみ)] 項目を選択解除したままにします。
XML エディターでは、primaryNodeOnly
設定は次のように記述されます。
<jms:listener config-ref="config" destination="${inputQueue}" primaryNodeOnly="false"/>
xml
トピックからメッセージをコンシュームする場合、デフォルトのコネクタ動作では、プライマリノードでのみメッセージを受信するため、クラスター間で同じメッセージを複数回処理することが回避されます。
クラスター内のトピックからメッセージをコンシュームする場合、[Primary node only (プライマリノードのみ)] の設定をオフにすると、共有サブスクリプションも設定していない限りクラスターで同じメッセージが複数回処理されます。
JMS 2.0 共有サブスクリプションメカニズムを使用していて、すべてのノードからメッセージをコンシュームするようにクラスター設定を変更する場合、同じように [Primary node only (プライマリノードのみ)] 項目を false
に設定します。
次の例では、2.0 仕様の共有サブスクリプションメカニズムを使用してコネクタを設定します。
Studio で、フローから [On New Message] ソースを選択します。
On New Message ソースの設定画面で、[Topic consumer (トピックコンシューマー)] を選択します。
[Shared (共有)] オプションを選択します。
[Subscription name (サブスクリプション名)] を clusteredEventListener
に設定します。
[Advanced (詳細)] タブで [Primary node only (プライマリノードのみ)] 項目を選択解除したままにします。
XML エディターでは、jms:topic-consumer
、shared
、および primaryNodeOnly
の設定は次のように記述されます。
<jms:listener config-ref="JMS_20_config" destination="${inputTopic}" primaryNodeOnly="false">
<jms:consumer-type>
<jms:topic-consumer shared="true" subscriptionName="clusteredEventListener"/>
</jms:consumer-type>
</jms:listener>
xml
JMS Connector では、ActiveMQ クライアントを使用する場合、サーバー接続 URL に対してプリフェッチを設定します。詳細は、 ActiveMQ のドキュメントを参照してください。
たとえば、jms.prefetchPolicy.all
パラメーターを含む次の接続 URL について考えてみます。
tcp://localhost:61616?jms.prefetchPolicy.all=50 tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1
xml
JMS Connector XML 設定では、接続 brokenUrl
の設定は次のようになります。
<jms:config name="JMS_Config_listen" doc:name="JMS Config" doc:id="6600826c-0798-496b-b016-9b9b29268cb8" >
<jms:active-mq-connection username="admin" password="admin" >
<reconnection >
<reconnect-forever />
</reconnection>
<jms:caching-strategy >
<jms:no-caching />
</jms:caching-strategy>
<jms:factory-configuration brokerUrl="tcp://localhost:61616?jms.prefetchPolicy.all=1" enable-xa="true" />
</jms:active-mq-connection>
<expiration-policy maxIdleTime="30" timeUnit="SECONDS" />
<jms:consumer-config />
<jms:producer-config persistentDelivery="true" />
</jms:config>
xml
大量のメッセージがあり高パフォーマンスが要求される場合、プリフェッチ値を増加します。ただし、メッセージ量が少なく、各メッセージの処理時間が長い場合は、プリフェッチを 1
に設定します。これにより、コンシューマーでは一度に 1 つのメッセージのみが処理されます。ただし、ゼロのプリフェッチ制限を指定すると、メッセージがコンシューマーにプッシュされるのではなくコンシューマーでメッセージが 1 つずつポーリングされます。