第5章 AMQP
AMQP リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
AMQP コンポーネントは、Qpid プロジェクトを介して AMQP プロトコル をサポートします。
Maven ユーザーは、このコンポーネントの
pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-amqp</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
amqp:[queue:|topic:]destinationName[?options]
宛先名の後に、JMS コンポーネントのさまざまな設定オプションをすべて指定できます。
AMQP オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
宛先名の後に、JMS コンポーネントのさまざまな設定オプションをすべて指定できます。
使用方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
AMQP コンポーネントは JMS コンポーネントから継承されるため、前者の使用は後者とほぼ同じになります。
// Consuming from AMQP queue
from("amqp:queue:incoming").
to(...);
// Sending message to the AMQP topic
from(...).
to("amqp:topic:notify");
AMQP コンポーネントの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.16.1 以降では、
AMQPComponent#amqp10Component(String connectionURI) ファクトリーメソッドを使用して、事前設定されたトピック接頭辞で AMQP 1.0 コンポーネントを返すこともできます。
AMQPComponent amqp = AMQPComponent.amqp10Component("amqp://guest:guest@localhost:5672");
Camel 2.17 以降、
AMQPComponent#amqp10Component(String connectionURI) は AMQPComponent#amqpComponent(String connectionURI) の代わりに ファクトリーメソッドが非推奨になりました。
AMQPComponent amqp = AMQPComponent.amqpComponent("amqp://localhost:5672");
AMQPComponent authorizedAmqp = AMQPComponent.amqpComponent("amqp://localhost:5672", "user", "password");
Camel 2.17 以降、AMQP コンポーネントを自動的に設定するために、
org.apache.camel.component.amqp.AMQPConnectionDetails のインスタンスをレジストリーに追加することもできます。たとえば、Spring Boot の場合、Bean を定義する必要があります。
@Bean
AMQPConnectionDetails amqpConnection() {
return new AMQPConnectionDetails("amqp://lcoalhost:5672");
}
@Bean
AMQPConnectionDetails securedAmqpConnection() {
return new AMQPConnectionDetails("amqp://lcoalhost:5672", "username", "password");
}
Camel プロパティーに依存して AMQP コネクションの詳細を読み取ることもできます。ファクトリーメソッド
AMQPConnectionDetails.discoverAMQP() は、以下のスニペットが示すように、Kubernetes のような慣例で Camel プロパティーの読み取りを試みます。
export AMQP_SERVICE_HOST = "mybroker.com"
export AMQP_SERVICE_PORT = "6666"
export AMQP_SERVICE_USERNAME = "username"
export AMQP_SERVICE_PASSWORD = "password"
...
@Bean
AMQPConnectionDetails amqpConnection() {
return AMQPConnectionDetails.discoverAMQP();
}
トピックの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
camel-amqp と連携するトピックを使用するには、以下のように topic:// をトピック接頭辞として使用するようコンポーネントを設定する必要があります。
<bean id="amqp" class="org.apache.camel.component.amqp.AmqpComponent">
<property name="connectionFactory">
<bean class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl" factory-method="createFromURL">
<constructor-arg index="0" type="java.lang.String" value="amqp://localhost:5672" />
<property name="topicPrefix" value="topic://" /> <!-- only necessary when connecting to ActiveMQ over AMQP 1.0 -->
</bean>
</property>
</bean>
AMQPComponent#amqpComponent() メソッドと AMQPConnectionDetails の両方で、トピック接頭辞でコンポーネントを事前に設定するため、明示的に設定する必要はありません。