271.7. 샘플
라우팅 키 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>
;를 레지스트리에 "bindArgs"로 배치합니다.
예를 들어, 스프링에 메서드 선언
@Bean(name="bindArgs") public Map<String, Object> bindArgsBuilder() { return Collections.singletonMap("foo", "bar"); }
271.7.1. 교환 간 라우팅 시 문제 ( Camel 2.20.x 이상)
예를 들어 아래 예제와 같이 하나의 Rabbit 교환에서 다른 Rabbit 교환에서 메시지를 라우팅하려면 foo
from("rabbitmq:foo") .to("rabbitmq:bar")
그런 다음 Camel이 메시지를 eg foo rabbitmq.EXCHANGE_NAME
을 교환 이름 eg foo
와 함께 제공하기 때문입니다. 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")