269.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"로 배치합니다.

예를 들어, 스프링에 메서드 선언

@Bean(name="bindArgs")
public Map<String, Object> bindArgsBuilder() {
    return Collections.singletonMap("foo", "bar");
}

269.6.1. 교환 간 라우팅 시 문제 ( Camel 2.20.x 이상)

예를 들어 아래 예제와 같이 하나의 Rabbit 교환에서 다른 Rabbit 교환에서 메시지를 라우팅하려면 foo → bar를 사용합니다.

from("rabbitmq:foo")
  .to("rabbitmq:bar")

그런 다음 Camel이 메시지를 eg foo → 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")