第2章 ActiveMQ


ActiveMQ コンポーネント

ActiveMQ コンポーネントを使用すると、JMS Queue または Topic にメッセージを送信したり、Apache ActiveMQ を使用して JMS Queue または Topic からメッセージを消費したりできます。
このコンポーネントは JMS コンポーネントをベースとしており、送信に Spring の JmsTemplate を使用し、MessageListenerContainer を使用して宣言的トランザクションに Spring の JMS サポートを使用します。JMS コンポーネントのすべてのオプションは、このコンポーネントにも適用されます。
このコンポーネントを使用するには、クラスパスに camel-core.jarcamel-spring.jarcamel-jms.jar などの Apache Camel 依存関係とともに activemq.jar または activemq-core.jar があることを確認してください。
トランザクションおよびキャッシュ
パフォーマンスに影響する可能 性があるため JMS でトランザクションを使用している場合は、JMS ページの以下のトランザクションレベルとキャッシュ レベルを参照してください。

URI 形式

activemq:[queue:|topic:]destinationName
Copy to Clipboard Toggle word wrap
destinationName は ActiveMQ キューまたはトピック名です。デフォルトでは、destinationName はキュー名として解釈されます。たとえば、FOO.BAR キューに接続するには、以下を使用します。
activemq:FOO.BAR
Copy to Clipboard Toggle word wrap
必要に応じて、オプションの queue: 接頭辞を含めることができます。
activemq:queue:FOO.BAR
Copy to Clipboard Toggle word wrap
トピックに接続するには、topic: 接頭辞を含める必要があります。たとえば、Stocks.Prices トピックに接続するには、以下を使用します。
activemq:topic:Stocks.Prices
Copy to Clipboard Toggle word wrap

オプション

これらのオプションはすべてこのコンポーネントに適用されるため、JMS コンポーネントのオプションを参照してください。

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。このモデルの詳細は、Deploying into a Web Server の Apache Camel on JBoss EAP の章を参照してください
ActiveMQ Camel コンポーネントを設定して、組み込みブローカーまたは外部ブローカーのいずれかと連携できます。JBoss EAP コンテナーにブローカーを埋め込むには、EAP コンテナー設定ファイルに ActiveMQ リソースアダプターを設定します。詳細は、JBoss Active MQ リソースアダプターのインストール を参照してください。

接続ファクトリーの設定

以下の テストケース は、ActiveMQ への接続に使用される brokerURL を指定する一方で、activeMQComponent () メソッド を使用して ActiveMQComponent を CamelContext に追加する方法を示しています。
camelContext.addComponent("activemq", activeMQComponent("vm://localhost?broker.persistent=false"));
Copy to Clipboard Toggle word wrap

Spring XML を使用した接続ファクトリーの設定

ActiveMQComponent で以下のように ActiveMQ ブローカー URL を設定できます。
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext xmlns="http://camel.apache.org/schema/spring">
  </camelContext>


  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://somehost:61616"/>
  </bean>

</beans>
Copy to Clipboard Toggle word wrap

接続プールの使用

Camel を使用して ActiveMQ ブローカーに送信する場合は、プールされた接続ファクトリーを使用して JMS 接続、セッション、およびプロデューサーの効率的なプーリングを処理することが推奨されます。これは、ActiveMQ Spring Support のページに記載されています。
Maven で Jencks AMQ プールを使用できます。
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>_activemq-version_</version>
    </dependency>
Copy to Clipboard Toggle word wrap
次に、activemq コンポーネントを以下のように設定します。
    <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616" />
    </bean>

    <bean id="pooledConnectionFactory"    class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
        <property name="maxConnections" value="8" />
        <property name="connectionFactory" ref="jmsConnectionFactory" />
    </bean>


    <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="pooledConnectionFactory"/>
        <property name="concurrentConsumers" value="10"/>
    </bean>

    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="jmsConfig"/>
    </bean>
Copy to Clipboard Toggle word wrap
注記
プールされた接続ファクトリーの init メソッドおよび destroy メソッドに注意してください。これは、接続プールが適切に起動およびシャットダウンされるようにすることが重要です。
次に、PooledConnectionFactory は、同時に使用する最大 8 つの接続を持つ接続プールを作成します。各接続は、多くのセッションで共有できます。maxActive という名前のオプションを使用して、接続ごとのセッションの最大数を設定できます。デフォルト値は 500 です。ActiveMQ 5.7 以降では、オプションの名前が maxActiveSessionPerConnection という名前になるよう名前が変更されました。concurrentConsumersmaxConnections よりも高い値に設定されていることに注意してください。これは、各コンシューマーがセッションを使用し、セッションが同じ接続を共有できるため、安全です。この例では、8 * 500 = 4000 のアクティブなセッションを同時に指定できます。

ルートでの MessageListener POJO の呼び出し

ActiveMQ コンポーネントは、JMS MessageListener をプロセッサーに変換するヘルパー Type Converter も提供します。つまり、Bean コンポーネントは任意のルート内で JMS MessageListener Bean を直接呼び出すことができます。
たとえば、以下のように JMS で MessageListener を作成できます。
public class MyListener implements MessageListener {
   public void onMessage(Message jmsMessage) {
       // ...
   }
}
Copy to Clipboard Toggle word wrap
次に、以下のようにルートでこれを使用します。
from("file://foo/bar").
  bean(MyListener.class);
Copy to Clipboard Toggle word wrap
つまり、Apache Camel コンポーネント を再利用し、JMS MessageListener POJO に簡単に統合できます。

ActiveMQ 宛先オプションの使用

ActiveMQ 5.6 で利用可能
destination. 接頭辞を使用して、エンドポイント URI で Destination Options を設定できます。たとえば、コンシューマーを排他的としてマークし、その prefetch サイズを 50 に設定するには、次のように実行できます。
<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="file://src/test/data?noop=true"/>
    <to uri="activemq:queue:foo"/>
  </route>
  <route>
    <!-- use consumer.exclusive ActiveMQ destination option, notice we have to prefix with destination. -->
    <from uri="activemq:foo?destination.consumer.exclusive=true&estination.consumer.prefetchSize=50"/>
    <to uri="mock:results"/>
  </route>
</camelContext>
Copy to Clipboard Toggle word wrap

アドバイザリーメッセージの消費

ActiveMQ は、消費できるトピックに含まれる Advisory メッセージ を生成できます。このようなメッセージは、低速なコンシューマーを検出したり、統計値(1 日あたりのメッセージ/生成の数など)を構築する場合にアラートを送信するのに役立ちます。 以下の Spring DSL の例は、トピックからメッセージを読み取る方法を示しています。
<route>
	<from uri="activemq:topic:ActiveMQ.Advisory.Connection?mapJmsMessage=false" />
	<convertBodyTo type="java.lang.String"/>
	<transform>
	     <simple>${in.body}&#13;</simple>
	</transform>
	<to uri="file://data/activemq/?fileExist=Append&fileName=advisoryConnection-${date:now:yyyyMMdd}.txt" />
</route>
Copy to Clipboard Toggle word wrap
キューでメッセージを消費すると、data/activemq フォルダーの下に以下のファイルが表示されるはずです。
advisoryConnection-20100312.txt advisoryProducer-20100312.txt
文字列を含む :
      ActiveMQMessage {commandId = 0, responseRequired = false, messageId = ID:dell-charles-3258-1268399815140
      -1:0:0:0:221, originalDestination = null, originalTransactionId = null, producerId = ID:dell-charles-
      3258-1268399815140-1:0:0:0, destination = topic://ActiveMQ.Advisory.Connection, transactionId = null, 
      expiration = 0, timestamp = 0, arrival = 0, brokerInTime = 1268403383468, brokerOutTime = 1268403383468, 
      correlationId = null, replyTo = null, persistent = false, type = Advisory, priority = 0, groupID = null, 
      groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, 
      marshalledProperties = org.apache.activemq.util.ByteSequence@17e2705, dataStructure = ConnectionInfo 
      {commandId = 1, responseRequired = true, connectionId = ID:dell-charles-3258-1268399815140-2:50, 
      clientId = ID:dell-charles-3258-1268399815140-14:0, userName = , password = *****, 
      brokerPath = null, brokerMasterConnector = false, manageable = true, clientMaster = true}, 
      redeliveryCounter = 0, size = 0, properties = {originBrokerName=master, originBrokerId=ID:dell-charles-
      3258-1268399815140-0:0, originBrokerURL=vm://master}, readOnlyProperties = true, readOnlyBody = true, 
      droppable = false}
Copy to Clipboard Toggle word wrap

コンポーネント JAR の取得

この依存関係が必要です。
  • activemq-camel
ActiveMQ は、ActiveMQ プロジェクト でリリースされた JMS コンポーネントの拡張機能です。
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-camel</artifactId>
  <version>_activemq-version_</version>
</dependency>
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat