IBM MQ コネクタ

IBM MQ コネクタを使用すると、IBM MQ JMS 実装を使用している IBM MQ ブローカーに対してメッセージを送信できます。 この主な機能は次のとおりです。

  • 特定の宛先でのパブリッシュ/サブスクライブパターンのサポート。

  • 特定の宛先でのリスン/応答パターンのサポート。

  • 特定の宛先での固定または一時応答キューを使用した Publish-Consume 応答パターンのサポート。

  • メッセージの非ブロックパブリッシュとコンシューム。

接続モード

IBM 設定を作成する際には、使用する IBM 接続モードを選択します。

IBM MQ 8 の時点では、使用できる接続モードは*クライアント*と*バインディング*の 2 つのみです。

クライアント接続モード

クライアント接続モードでは、Mule アプリケーションが実行されているシステムと同じシステムまたは他のシステムで動作している IBM MQ キューマネージャに接続できます。 どちらの場合でも、IBM MQ コネクタは IBM MQ キューマネージャに TCP/IP 経由で接続します。

この接続モードでは、次のパラメータを設定できます。

パラメータ 必須 デフォルト値 説明

Host (ホスト)

はい

IBM MQ ブローカーが動作しているホスト。

Port (ポート)

いいえ

1414

キューマネージャのリスナポート

Queue Manager (キューマネージャ)

いいえ

チャネル定義を選択する際に使用するキューマネージャ。

Channel (チャネル)

いいえ

接続先のチャネル名。

Connection Name List (接続名リスト)

いいえ

接続が失われたときにクライアントが再接続を試みるホスト。+ 接続名リストでは、ホストと IP ポートのペアをカンマで区切って指定します。
例: 0.0.0.0(1414),somehost.domain.com(1415)

クライアント接続
Figure 1. Studio でのクライアント接続設定
XML でのクライアント接続設定
<ibm-mq:config name="IBM_MQ_Config">
 <ibm-mq:connection >
   <ibm-mq:connection-mode >
	 	<ibm-mq:client host="0.0.0.0" port="1414" queueManager="QM1" channel="DEV.ADMIN.SVRCONN" />
		</ibm-mq:connection-mode>
	</ibm-mq:connection>
</ibm-mq:config>

バインディング接続モード

バインディング接続モードでは、同じシステムで動作している IBM MQ ブローカーに自動的に接続します。

このモード専用のパラメータは、接続先のキューマネージャで、必要に応じて設定します。IBM MQ ブローカーでデフォルトのキューマネージャが設定されている場合は、この設定は必須ではありません。

クライアント接続
Figure 2. Studio でのバインディング接続設定
XML でのバインディング接続設定
<ibm-mq:config name="IBM_MQ_Config">
  <ibm-mq:connection >
    <ibm-mq:connection-mode >
      <ibm-mq:binding queueManager="QM1" />
    </ibm-mq:connection-mode>
  </ibm-mq:connection>
</ibm-mq:config>

グローバルデフォルトの定義

IBM MQ の config では、メッセージをコンシュームまたはパブリッシュする際にデフォルトとして使用される複数のパラメータを定義できます。これにより、設定に関連付けられているすべての操作に対してグローバルデフォルト動作を定義しておいて、カスタム動作を必要とする操作でのみパラメータを変更することができます。

たとえば、この設定に関連付けられているすべての操作でメッセージをコンシュームする際のデフォルトの selector 動作を定義することができます。

<ibm-mq:config name="IBM_MQ_Config">
  <ibm-mq:connection/>
  <ibm-mq:consumer-config selector="JMSType = `INVOICE`"/>
  <ibm-mq:producer-config timeToLive="60000"/>
</ibm-mq:config>

この場合、この設定に関連付けられているすべての consume または listener 操作はデフォルトで selector を使用し、Publish または Publish-Consume が発生するたびに、送信されるメッセージの TTL は 60 秒に設定されます。

これらのすべてのプロパティは、必要であれば操作レベルで変更できます。 短い TTL でメッセージをパブリッシュするには、次の設定例を使用してパラメータを変更します。

<ibm-mq:publish config-ref="IBM_MQ_Config" timeToLive="10000"/>

JMS 仕様の選択

主要な共通パラメータである JMS 仕様は、サポートされるバージョンである 2.0 と 1.1 のどちらかを選択します。この接続に関連付けられるブローカー実装でサポートされる仕様を選択しないと、接続が失敗します。

JMS 2.0 のみで利用可能な機能は、他の仕様では動作しません。

認証用のログイン情報の指定

認証された接続を確立するには、接続要素でユーザ名とパスワードを設定する必要があります。

<ibm-mq:config name="IBM_MQ_Config">
	<ibm-mq:connection username="<username>" password="<password>" >
		<ibm-mq:connection-mode >
			<ibm-mq:client
			host="0.0.0.0"
			port="1414"
			queueManager="QM1"
			channel="DEV.ADMIN.SVRCONN" />
		</ibm-mq:connection-mode>
	</ibm-mq:connection>
</ibm-mq:config>

接続キャッシュの設定

ブローカーに接続して必要な操作を実行するため、JMS コネクタは複数のセッション、コンシューマ、およびプロデューサを作成します。これらをキャッシュして再利用することで、アプリケーションのパフォーマンスを高めることができます。そのため、IBM MQ コネクタでは、新しい接続を作成する際に使用するキャッシュ戦略を設定できます。デフォルトの戦略では、コンシューマとプロデューサの両方をキャッシュし、できるだけ多くのインスタンスを同時にメモリ内に保持します。

キャッシュ設定は、接続宣言内で直接カスタマイズすることができます。

<ibm-mq:config name="IBM_MQ_Config">
  <ibm-mq:connection>
    <ibm-mq:caching-strategy>
      <ibm-mq:default-caching sessionCacheSize="100" consumersCache="false" producersCache="true"/>
    </ibm-mq:caching-strategy>
  </ibm-mq:connection>
</ibm-mq:config>

接続クライアントの識別

クライアント識別子は、接続とそのオブジェクトを、クライアントの代わりにプロバイダによって維持される状態で関連付けるもので、共有されない永続的なサブスクリプションを特定するために*必須*です。

<ibm-mq:config name="IBM_MQ_Config">
  <ibm-mq:connection clientId="${env.clientId}"/>
</ibm-mq:config>
定義上、clientId によって識別されるクライアント状態は、同時に 1 つの接続によってのみ「使用中」となることができます。

接続に必要なライブラリのセットアップ

重要: コネクタはどの特定の実装にもバインドされていないため、使用する接続の種別には関係なく、常に JMS クライアント実装を含むライブラリを設定する必要があります。

IBM MQ 外部ライブラリ

IBM MQ コネクタを使用するには、外部 IBM MQ ライブラリを設定します。IBM MQ クライアントライブラリは、com.ibm.mq.jms.MQConnectionFactory 実装を提供している必要があります。

IBM MQ Allclient ライブラリを使用します。

たとえば、次のように設定します。

<dependency>
    <groupId>com.ibm.mq</groupId>
    <artifactId>com.ibm.mq.allclient</artifactId>
    <version>9.0.5.0</version>
</dependency>

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub