JMS Connector 用の ActiveMQ 接続の設定

JMS 用 Anypoint Connector (JMS Connector) には、ActiveMQ 5 のサポートを提供する ActiveMQ 接続設定が含まれています。この接続を使用して、JMS 1.1 (デフォルト)、JMS 1.0.2b、JMS 2.0 仕様を設定できます。また、JMS の全般的なすべての接続パラメーターだけでなく、ActiveMQ でのみ表示されるカスタムパラメーターも設定できます。

ActiveMQ 接続の設定

ActiveMQ 接続を宣言したら、目的の設定に合わせて​接続ファクトリー​をカスタマイズします。接続のすべてのパラメーターにはデフォルト値があります。つまり、自分のユースケースに関連するパラメーターのみを設定する必要があります。また、ActiveMQ 接続では ​[Initial redelivery delay (初期再配信遅延)]​ などの ActiveMQ 実装専用のパラメーターが公開されています。

次の例では、​ActiveMQ 接続​を設定します。

  1. Studio で、​[Global Elements (グローバル要素)]​ タブに移動します。

  2. [Create (作成)]​ をクリックします。

  3. 検索条件ボックスに ​jms​ と入力し、​[JMS Config (JMS 設定)]​ を選択します。

  4. [OK]​ をクリックします。

  5. [Connection (接続)]​ 項目で ​[ActiveMQ Connection (ActiveMQ 接続)]​ を選択します。

  6. [Factory configuration (ファクトリー設定)]​ 項目で、​[Edit Inline (インライン編集)]​ を選択します。

  7. [Broker url (ブローカー URL)]​ 項目値を、接続先のブローカーのアドレス (​tcp://localhost:61616​ など) に設定します。

  8. [OK]​ をクリックします。

「Broker URL (ブローカー URL)」 項目が tcp://localhost:61616 に設定された、Studio の ActiveMQ 接続設定ウィンドウ

XML エディターでは、​<jms:active-mq-connection>​ および ​<jms:factory-configuration>​ 設定は次のように記述されます。

 <jms:config name="JMS_Config">
  <jms:active-mq-connection >
   <jms:factory-configuration brokerUrl="tcp://localhost:61616" />
  </jms:active-mq-connection>
 </jms:config>

ActiveMQ 接続 - 接続テストなしに設定する (非推奨)

複数のノードでブローカー接続のログイン情報を同時に使用できない場合があります。その場合、Mule アプリケーションはリスナーの実行が 1 つのノードのみで行われるように、​true​ に設定された ​[Primary node only (プライマリノードのみ)]​ 項目を使用します。ただし、他のノードでログイン情報がすでに使用されている場合、デプロイメント前に実行される接続テストでプライマリノードのデプロイメントエラーが発生することがあります。この特定のケースでは、​[ActiveMQ Connection - No Connectivity Test (ActiveMQ 接続 - 接続テストなし)]​ を使用します。これは、デプロイメント前の接続テストが実行されないという点を除き、​[ActiveMQ Connection (ActiveMQ 接続)]​ と同じです。

次の例では、​[ActiveMQ Connection - No Connectivity Test (ActiveMQ 接続 - 接続テストなし)]​ を設定します。

  1. Studio で、​[Global Elements (グローバル要素)]​ タブに移動します。

  2. [Create (作成)]​ をクリックします。

  3. 検索条件ボックスに ​jms​ と入力し、​[JMS Config (JMS 設定)]​ を選択します。

  4. [OK]​ をクリックします。

  5. [Connection (接続)]​ 項目で ​[ActiveMQ Connection - No Connectivity Test (ActiveMQ 接続 - 接続テストなし)]​ を選択します。

  6. 省略可能な ​[Client id (クライアント ID)]​ 項目を設定します。

  7. [Factory configuration (ファクトリー設定)]​ 項目で、​[Edit Inline (インライン編集)]​ を選択します。

  8. [Broker url (ブローカー URL)]​ 項目値を、接続先のブローカーのアドレス (​tcp://localhost:61616​ など) に設定します。

  9. [OK]​ をクリックします。

「Broker URL (ブローカー URL)」 項目が tcp://localhost:61616 に設定された、Studio の 「ActiveMQ Connection - No Connectivity Test (ActiveMQ 接続 - 接続テストなし)」 設定ウィンドウ

XML エディターでは、​<jms:active-mq-nct-connection>​ および ​<jms:factory-configuration>​ 設定は次のように記述されます。

 <jms:config name="JMS_Config">
  <jms:active-mq-nct-connection clientId="my-mule-cli">
   <jms:factory-configuration brokerUrl="tcp://localhost:61616" />
  </jms:active-mq-nct-connection>
 </jms:config>

必須のライブラリの設定

JMS Connector はどの特定の実装にもバインドされていないため、何らかの接続種別を設定する場合は、常に JMS クライアント実装を含むライブラリを設定する必要があります。Studio のグローバル要素ビューで ActiveMQ 外部ライブラリを設定するか、​pom.xml​ ファイルにライブラリの連動関係を手動で追加します。

  • ActiveMQ KahaDB
    activemq-kahadb-store​ 連動関係は VM トランスポート (​vm://localhost?broker.persistent=true​ など) に基づいて永続的なメモリ内ブローカーを使用する場合のみ必須です。この連動関係は、有効な ​org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter​ 実装を提供します。この連動関係は、永続的なメッセージ配信を行うためにも必須です。

    Studio の ​pom.xml​ ファイルでは、連動関係の追加は次のようになります。

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-kahadb-store</artifactId>
        <version>5.14.4</version>
    </dependency>
  • ActiveMQ ブローカー
    activemq-broker​ 連動関係は VM トランスポート (デフォルトで設定される) に基づいてメモリ内ブローカーを使用する場合のみ必須です。この連動関係は、有効な ​org.apache.activemq.broker.Broker​ 実装を提供します。

    Studio の ​pom.xml​ ファイルでは、連動関係の追加は次のようになります。

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-broker</artifactId>
        <version>5.14.4</version>
    </dependency>
  • ActiveMQ クライアント
    ActiveMQ 接続を使用するには、​activemq-client​ 連動関係が常に必須です。有効な ​org.apache.activemq.ActiveMQConnectionFactory​ 実装を提供する連動関係を選択します。

Studio の ​pom.xml​ ファイルでは、連動関係の追加は次のようになります。

+

<dependency>
     <groupId>org.apache.activemq</groupId>
     <artifactId>activemq-client</artifactId>
     <version>5.14.4</version>
 </dependency>

これらのライブラリを [Global Element (グローバル要素)] ビューで設定する手順は、次のとおりです。

  1. Studio で、​[Global Elements (グローバル要素)]​ タブに移動します。

  2. [Create (作成)]​ をクリックします。

  3. 検索条件ボックスに ​jms​ と入力し、​[JMS Config (JMS 設定)]​ を選択します。

  4. [OK]​ をクリックします。

  5. [Connection (接続)]​ 項目で ​[ActiveMQ Connection (ActiveMQ 接続)]​ を選択します。

  6. [ActiveMQ KahaDB]​、​[ActiveMQ Broker (ActiveMQ ブローカー)]​、および ​[ActiveMQ Client (ActiveMQ クライアント)]​ ライブラリが表示されている ​[Required Libraries (必須のライブラリ)]​ セクションで ​[Configure…​ (設定…​)]​ ボタンをクリックし、連動関係をインストールします。

  7. 次のインストールオプションのいずれかを選択します。

    • Add recommended library (推奨されるライブラリを追加)​: 推奨されるライブラリをインストールします。

    • Use local file (ローカルファイルを使用)​: ローカルファイルで必要なエンジンライブラリを探してインストールします。

    • Add Maven dependency (Maven 連動関係を追加)​: 連動関係を探してインストールします。

「Configure (設定)」 ボタンをクリックして連動関係をインストールする
Figure 1. JMS Connector のライブラリ設定

メモリ内ブローカーの設定

デフォルトでは、ActiveMQ 用 Anypoint Connector (ActiveMQ コネクタ) はメモリ内ブローカーを使用します。これにより、外部ブローカーに対して接続を設定することなくアプリケーションの作成を簡単に開始できるようになります。 メモリ内ブローカーは ​ActiveMQ KahaDB​ ライブラリと ​ActiveMQ ブローカー​ライブラリの両方を設定するために必要です。デフォルト URL は次のとおりです。

vm://localhost?broker.persistent=false&broker.useJmx=false

Studio でメモリ内ブローカーを設定する手順は、次のとおりです。

  1. Studio で ​[JMS Config (JMS 設定)]​ グローバル要素ウィンドウを開きます。

  2. [Connection Factory (接続ファクトリー)]​ セクションで ​[Factory configuration (ファクトリー設定)]​ 項目を ​[Edit inline (インライン編集)]​ に設定します。

  3. [Broker url (ブローカー URL)]​ 項目を、接続するブローカーのアドレス (​vm://localhost?broker.persistent=false&broker.useJmx=false​ など) に設定します。

  4. [OK]​ をクリックします。

「Broker url (ブローカー URL)」 項目を、接続するブローカーのアドレスに設定する
Figure 2. JMS Connector のメモリ内ブローカーの設定

XML エディターでは、​brokerUrl​ 設定は次のように記述されます。

<jms:config name="JMS_Config" doc:name="JMS Config">
		<jms:active-mq-connection >
			<jms:factory-configuration brokerUrl="vm://localhost?broker.persistent=false&amp;broker.useJmx=false"/>
		</jms:active-mq-connection>
	</jms:config>

メッセージ再配信の設定

メッセージを正しく処理できない場合、肯定応答されません。その後、メッセージは再配信され、やはり正しく処理されない可能性が高く、このサイクルは永久に実行されます。

メッセージが無限に再配信されないようにするには、​[Max redelivery (最大再配信)]​ 項目を設定します。
デフォルトでは、JMS Connector では最大再配信の値として ​0​ が使用されます。つまり、メッセージが回復されたか、トランザクションからロールバックされたかに関係なく、メッセージは再配信されません。メッセージで永続的な配信が設定されている場合、ActiveMQ はメッセージを ​DLQ.QUEUE​ (デッドレターキュー) に送信します。

ActiveMQ により、クライアント側の再配信を設定することもできます。

  • [Initial redelivery delay (初期再配信遅延)]​ 項目を使用すると、最初のメッセージを再配信するまで待機する時間 (ミリ秒) を設定できます。

  • [Redelivery delay (再配信遅延)]​ 項目では、最初の再配信の後、メッセージを次に再配信するまで待機する時間 (ミリ秒) を設定できます。

Studio でこれらの項目を設定する手順は、次のとおりです。

  1. Studio で ​[JMS Config (JMS 設定)]​ グローバル要素ウィンドウを開きます。

  2. [Connection Factory (接続ファクトリー)]​ セクションで ​[Factory configuration (ファクトリー設定)]​ 項目を ​[Edit inline (インライン編集)]​ に設定します。

  3. [Initial redelivery delay (初期再配信遅延)]​ 項目を ​1000​ に設定します。

  4. [Redelivery delay (再配信遅延)]​ 項目を ​100​ に設定します。

  5. [Max redelivery (最大再配信)]​ 項目を ​10​ に設定します。

  6. [OK]​ をクリックします。

「Max redelivery (最大再配信)」 項目を 10 に設定する
Figure 3. JMS Connector の再配信の設定

XML エディターでは、​maxRedelivery​、​redeliveryDelay​、および ​initialRedeliveryDelay​ の設定は次のように記述されます。

<jms:config name="JMS_Config">
  <jms:active-mq-connection>
    <jms:factory-configuration maxRedelivery="10"
      redeliveryDelay="100"
      initialRedeliveryDelay="1000"/>
  </jms:active-mq-connection>
</jms:config>

信頼されるパッケージの設定

ActiveMQ バージョン 5.12.2 および 5.13.0 以降では、逐次化および非逐次化できるクラスを制限しており、ホストシステムでの悪意のあるペイロードの実行を防ぐことができます。

ActiveMQ の場合、JMS Connector ではデフォルトで JDK および JRE 提供のクラスしか使用できません。そのため、オブジェクトメッセージを交換する必要がある場合は、​[Trusted packages (信頼されるパッケージ)]​ 項目を有効にして、アプリケーションで使用しているパッケージを追加する必要があります。
[Trust All Packages (すべてのパッケージを信頼)]​ 項目を有効にし、任意のオブジェクトのシリアル化および非シリアル化を許可してより多くのクラスをシリアル化することもできますが、ほとんどの場合、無効のままにするよりも安全性は低くなります。セキュリティを高めて、悪意のある攻撃を防ぐには、このパラメーターを無効のままにしてください。

次の例では、​com.mulesoft.someapp​ および ​com.mulesoft.someapp.model​ パッケージに準拠しているユーザーのみが ObjectMessages をコンシュームおよび生成できるように接続を設定します。

  1. Studio で ​[JMS Config (JMS 設定)]​ グローバル要素ウィンドウを開きます。

  2. [Connection Factory (接続ファクトリー)]​ セクションで ​[Factory configuration (ファクトリー設定)]​ 項目を ​[Edit inline (インライン編集)]​ に設定します。

  3. [Trusted packages (信頼されるパッケージ)]​ 項目を選択します。

  4. プラス記号をクリックして、新しいパッケージを追加します。

  5. [Trusted package (信頼されるパッケージ)]​ ウィンドウで ​[Value (値)]​ 項目を ​com.mulesoft.someapp​ に設定します。

  6. [Finish (完了)]​ をクリックします。

  7. ステップ 4 を繰り返します。

  8. [Trusted package (信頼されるパッケージ)]​ ウィンドウで ​[Value (値)]​ 項目を ​com.mulesoft.someapp.model​ に設定します。

  9. [Finish (完了)]​ をクリックします。

  10. [Trust all packages (すべてのパッケージを信頼)]​ 項目を選択します。

  11. [OK]​ をクリックします。

「Trusted packages (信頼されるパッケージ)」 および 「Trust all packages (すべてのパッケージを信頼)」 項目を選択する
Figure 4. JMS Connector の信頼されるパッケージの設定

XML エディターでは、​<jms:trusted-packages>​ および ​trustAllPackages​ の設定は次のように記述されます。

<jms:config name="JMS_Config">
  <jms:active-mq-connection>
    <jms:factory-configuration trustAllPackages="true">
      <jms:trusted-packages >
        <jms:trusted-package value="com.mulesoft.someapp" />
        <jms:trusted-package value="com.mulesoft.someapp.model" />
      </jms:trusted-packages>
    </jms:factory-configuration>
  </jms:active-mq-connection>
</jms:config>

SSL 接続の設定

JMS Connector バージョン 1.3.0 以降では、SSL 設定を使用して ActiveMQ 接続を設定し、ActiveMQ ブローカーに対して安全で暗号化された接続を確立できます。

  1. Studio で、​[Global Elements (グローバル要素)]​ タブに移動します。

  2. [Create (作成)]​ をクリックします。

  3. 検索条件ボックスに ​jms​ と入力し、​[JMS Config (JMS 設定)]​ を選択します。

  4. [OK]​ をクリックします。

  5. [Connection (接続)]​ 項目で ​[ActiveMQ Connection (ActiveMQ 接続)]​ を選択します。

  6. [TLS/SSL]​ タブに移動します。

  7. [TLS Configuration (TLS 設定)]​ 項目で、​[Edit Inline (インライン編集)]​ を選択します

  8. [Trust Store Configuration (トラストストア設定)]​ セクションで、次の項目を設定します。

    • Path (パス)​: client.ts

    • Password (パスワード)​: password

  9. [Key Store Configuration (キーストア設定)]​ セクションで、次の項目を設定します。

    • Path (パス)​: client.ks

    • Alias (別名)​: client

    • Key Password (キーパスワード)​: password

    • Password (パスワード)​: password

  10. [OK]​ をクリックします。

SSL 設定。
Figure 5. JMS Connector の SSK 設定

XML エディターでは、​<jms:active-mq-connection>​、​<tls:trust-store>​、および ​<tls:key-store>​ の設定は次のように記述されます。

<jms:config name="JMS_Config">
  <jms:active-mq-connection>
   <tls:context>
    <tls:trust-store
      path="client.ts"
      password="password" />
    <tls:key-store
      path="client.ks"
      password="password"
      keyPassword="password"
      alias="client" />
   </tls:context>
  </jms:active-mq-connection>
</jms:config>

JMS Connector でグローバル TLS コンテキスト設定を参照し、次の例のように、HTTP 用 Anypoint Connector (HTTP Connector) を使用してコネクタ間で同じ TLS コンテキストを再利用して共有することもできます。

<!--  HTTP Requester Configuration -->
<http:request-config name="HTTP_Request_configuration">
  <http:request-connection tlsContext="TLS_Context" />
</http:request-config>

<!--  JMS Configuration -->
<jms:config name="JMS_Config">
  <jms:active-mq-connection tlsContext="TLS_Context"/>
</jms:config>

<!--  Reusable TLS Context -->
<tls:context name="TLS_Context">
 <tls:trust-store
  path="client.ts"
  password="password" />
<tls:key-store
  path="client.ks"
  password="password"
  keyPassword="password"
  alias="client" />
</tls:context>