ActiveMQ 接続の設定

ActiveMQ への接続

ActiveMQ 5 のサポートは、 特に設定しなくても active-mq-connection を使用するコネクタによって提供されます。この接続により、JMS 1.1 (デフォルト) または JMS 1.0.2b 仕様の両方を使用し、JMS の全般的なすべての接続パラメータを設定し、 ActiveMQ でのみ表示されるカスタムパラメータを設定できます。

active-mq-connection を宣言すれば、あとはカスタム設定を使用して 接続ファクトリをセットアップするだけです。接続のすべてのパラメータには デフォルト値があります。つまり、自分のユースケースに関連するパラメータのみを 設定する必要があります。また、ActiveMQ 接続では initialRedeliveryDelay などの ActiveMQ 実装を除くパラメータが表示されます。

ActiveMQ 接続のシンプルな設定例は次のようになります。

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

オンメモリブローカー

デフォルトでは、ActiveMQ コネクタはオンメモリブローカーを使用します。これにより、 外部ブローカーに対して接続を設定する必要がなくなり、 アプリケーションの作成を簡単に開始できるようになります。

デフォルト URL: vm://localhost?broker.persistent=false&broker.useJmx=false

オンメモリブローカーは ActiveMQ Client ライブラリと ActiveMQ Brokerライブラリの両方を設定するために必要です。

SSL 接続

JMS 1.3.0 以降

ActiveMQ 接続は SSL 設定と一緒に設定できます。これにより、 コネクタは ActiveMQ ブローカーに対して安全で暗号化された接続を確立できます。

<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 ActiveMQ SSL 設定

また、コネクタはグローバル TLS コンテキスト設定を参照することもできます。そのため、 HTTP などのコネクタ間で同じ 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>

配信の処理

有害メッセージの回避

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

メッセージを処理できず、永久に再配信され、「有害メッセージ」になる状況を避けるには、 [Max Redelivery (最大再配信数)] の設定を行い、 メッセージをアプリケーションに配信できる最大回数を設定します。

この例では、メッセージは最大 10 回再配信されます。
<jms:config name="JMS_Config">
  <jms:active-mq-connection>
    <jms:factory-configuration maxRedelivery="10"/>
  </jms:active-mq-connection>
</jms:config>

デフォルトでは、JMS コネクタは maxRedelivery として 0 を使用します。つまり、 メッセージは再配信されず、メッセージがトランザクションから回復またはロールバックされる場合には 問題になりません。

メッセージで永続的な配信が設定されている場合、ActiveMQ はメッセージを DLQ.QUEUE (デッドレターキュー) に送信します。

高度な再配信

ActiveMQ により、ユーザはクライアント側の再配信設定を行うことができます。また、 max times redelivery of a message およびメッセージを再配信するためにコネクタに必要な速度を設定することもできます。

initialRedeliveryDelay: ミリ秒単位で、メッセージが最初に再配信されるまで 待機する時間。 redeliveryDelay: ミリ秒単位で、最初の再配信後にメッセージが再配信されるまで 待機する時間。

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

オブジェクトの逐次化

ActiveMQ 5.12.2 および 5.13.0 以降、ActiveMQ ではホストシステムを不正利用する おそれがある悪意のあるペイロードの実行を防ぐために、逐次化および非逐次化 できるクラスを制限しています。

信頼されるパッケージ

デフォルトでは、ActiveMQ のコネクタでは JDK/JRE 提供のクラスしか使用できませんが、 オブジェクトメッセージを交換する必要がある場合は、アプリケーションが使用しているパッケージを 追加する必要があります。

<jms:config name="JMS_Config">
  <jms:active-mq-connection>
    <jms:factory-configuration >
      <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>
JMS ActiveMQ の信頼されるパッケージ

この例では、JMS コネクタにより com.mulesoft.someapp および com.mulesoft.someapp.model パッケージに準拠した ObjectMessages のみを使用し、作成できます。

すべてのパッケージを信頼

他のクラスの逐次化を可能にするもう 1 つの方法は、trustAllPackages 設定の有効化です。これにより、任意のオブジェクトを逐次化および非逐次化 できるようにする以前の動作が回復されます。この場合、悪意のある攻撃を一切 防ぐことができなくなります。

<jms:config name="JMS_Config">
  <jms:active-mq-connection>
    <jms:factory-configuration trustAllPackages="true"/>
  </jms:active-mq-connection>
</jms:config>

必須のライブラリの設定

必須の JMS ライブラリの設定

ActiveMQ クライアント

ActiveMQ クライアントライブラリは、ActiveMQ 接続を使用するためにのみ必須であり、 ブローカーに対して接続するために必要です。

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

ActiveMQ ブローカー

ActiveMQ ブローカーは On Memory Broker を作成できます。

<dependency>
 <groupId>org.apache.activemq</groupId>
 <artifactId>activemq-broker</artifactId>
 <version>5.15.4</version>
</dependency>

ActiveMQ KahaDB

ActiveMQ KahaDB は On Memory Broker を使用する場合に必須ですが、 永続的なメッセージ配信を行うためにも必須です。

<dependency>
 <groupId>org.apache.activemq</groupId>
 <artifactId>activemq-kahadb-store</artifactId>
 <version>5.15.4</version>
</dependency>

Was this article helpful?

💙 Thanks for your feedback!