270.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")
bindArgs という ID の Map<String, Object>
をレジストリーに配置します。
たとえば、Spring にメソッドを宣言します
@Bean(name="bindArgs") public Map<String, Object> bindArgsBuilder() { return Collections.singletonMap("foo", "bar"); }
270.6.1. エクスチェンジ間のルーティングの問題 (Camel 2.20.x 以前)
たとえば、次の例に示すように、ある Rabbit エクスチェンジから別の Rabbit エクスチェンジにメッセージをルーティングしたい場合は、foo
from("rabbitmq:foo") .to("rabbitmq:bar")
次に、Camel がメッセージを自分自身にルーティングすることに注意してください (例: foo rabbitmq.EXCHANGE_NAME
にエクスチェンジの名前 (foo
など) を提供するためです。Camel プロデューサーがメッセージを bar
に送信する場合、ヘッダー 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
を使用して、別のエクスチェンジに送信できます。たとえば、cheese エクスチェンジに送信するには、次のことができます
from("rabbitmq:foo") .setHeader("rabbitmq.EXCHANGE_OVERRIDE_NAME", constant("cheese")) .to("rabbitmq:bar")