2014-12-18 5 views
0

RabbitMQ를 Camel과 함께 사용하려고합니다. Camel 2.14.1을 사용하고 있습니다.RabbitMQ와 Camel의 자동 바인딩 방지

RabbitMQ에서 팬 아웃 교환을 열고 나중에 큐를 바인딩하려고합니다. 이것은 잘 작동하는 것 같습니다. 그러나 Exchange를 만들 때마다 자동으로 시스템 이름 (숫자)으로 대기열에 바인딩됩니다. 그럴 수 없습니까? 다음은 Exchange에 100 개의 메시지를 게시하는 간단한 예제입니다. 그러나 자동으로 생성 된 대기열로 전달되므로이 문제를 피하고 싶습니다.

@Override 
    public void configure() throws Exception 
    { 
    final String testGUID = "xxxx"; 
    from("timer://publish?repeatCount=100&period=10&fixedRate=true").process(new Processor() 
      //from("timer://publish?repeatCount=100&period=1&fixedRate=true").process(new Processor() 

    { 
     @Override 
     public void process(Exchange _exchange) throws Exception 
     { 
     String message = String.valueOf(_exchange.getProperty(Exchange.TIMER_COUNTER)); 
     _exchange.getOut().setBody(message+testGUID); 
     } 
    }) 
      .to("rabbitmq://localhost/exchange=logs1237?autoDelete=false&username=guest&password=guest&exchangeType=fanout"); 

    } 

안부, 모르 텐 크 누드 센

UPDATE : 그것은 RabbitMQEndPoint의 "큐"가 null가 아닌 경우, 자동 큐의 트리거가 발생하는 것으로, 소스보고에서 보인다 . 그러나 "queue"는 "String.valueOf (UUID.randomUUID(). toString(). hashCode());"에 자동으로 할당됩니다. 건설.

답변

2

교환기를 대기열과 바인드하지 않으려면 declare 옵션을 false로 설정할 수 있습니다. BTW, 선언 옵션은 Camel 2.14.0 이후 새로 추가되었습니다.

+0

내 문제가 해결되었습니다. 내 URI 끝에 "& declare = false"를 추가하면 RabbitMQ가 교환에 동적 바인딩을 만들지 못했습니다. – Bal

0

에서 Camel 2.16.1부터 rabbitmq 구성 요소에 대한 새로운 옵션 인 skipQueueDeclare이 있는데 이는 this issue을 적절하게 해결합니다.