256.6. サンプル
ルーティングキー B でエクスチェンジ A にバインドされているキューからメッセージを受信するには、以下を行います。
from("rabbitmq:A?routingKey=B")
自動確認が無効になっている単一のスレッドでキューからメッセージを受信するには、以下を行います。
from("rabbitmq:A?routingKey=B&threadPoolSize=1&autoAck=false")
C と呼ばれるエクスチェンジにメッセージを送信するには、以下を行います。
to("rabbitmq:C")
ヘッダーエクスチェンジおよびキューの宣言
from("rabbitmq:ex?exchangeType=headers&queue=q&bindingArgs=#bindArgs")
また、対応する Map<String, Object&
gt; をレジストリーの「bindArgs」の ID に置き換えます。
spring でメソッドを宣言する例
@Bean(name="bindArgs") public Map<String, Object> bindArgsBuilder() { return Collections.singletonMap("foo", "bar"); }
256.6.1. エクスチェンジ間でルーティングする問題(Camel 2.20.x 以前)
たとえば、以下の例のように、ある Rabbit のエクスチェンジから別のエクスチェンジにメッセージをルーティングする場合は、foo
from("rabbitmq:foo") .to("rabbitmq:bar")
その後、Camel はメッセージを自身(例: foo foo
)を持つメッセージヘッダー rabbitmq.EXCHANGE_NAME
が提供されるためです。また、Camel プロデューサーがメッセージを バー
に送信すると、ヘッダー rabbitmq.EXCHANGE_NAME
はこれを上書きし、代わりにメッセージを foo
に送信します。
これを回避するには、以下のいずれかを実行する必要があります。
- ヘッダーを削除します。
from("rabbitmq:foo") .removeHeader("rabbitmq.EXCHANGE_NAME") .to("rabbitmq:bar")
-
または、プロデューサーで
bridgeEndpoint
モードをオンにします。
from("rabbitmq:foo") .to("rabbitmq:bar?bridgeEndpoint=true")
Camel 2.21 以降では改善され、エクスチェンジ間の簡単にルーティングできるようになりました。ヘッダー rabbitmq.EXCHANGE_NAME
は、宛先の交換を上書きするプロデューサーで使用されなくなりました。代わりに、新しいヘッダー rabbitmq.EXCHANGE_OVERRIDE_NAME
を使用して、別のエクスチェンジに送信することができます。たとえば、エクスチェンジの検証に送信するには、以下を実行できます。
from("rabbitmq:foo") .setHeader("rabbitmq.EXCHANGE_OVERRIDE_NAME", constant("cheese")) .to("rabbitmq:bar")