2014-12-18 5 views
0

Я пытаюсь использовать RabbitMQ с Camel. Я использую Camel 2.14.1.Избегайте автоматического связывания с RabbitMQ и Camel

Я хочу открыть обмен разветвителя на RabbitMQ, а затем связать очереди с ним. Кажется, это работает нормально. Однако каждый раз, когда я создаю Exchange, он автоматически привязывается к очереди с именем системы (числом). Разве я не могу этого избежать? Вот простой пример, который отправляет 100 сообщений в Exchange. Но они доставляются в автоматически создаваемую очередь, я хочу этого избежать.

@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"); 

    } 

С наилучшими пожеланиями, Morten Кнудсен

UPDATE: Кажется, глядя на источник, что запуск автоматической очереди происходит, если «очередь» в RabbitMQEndPoint не является нулевым. Но «queue» автоматически присваивается «String.valueOf (UUID.randomUUID(). ToString(). HashCode()); при строительстве.

ответ

2

Если вы не хотите связывать обмен с очередью, вы можете установить для параметра declare значение false. BTW, опция declare добавлена ​​с Camel 2.14.0.

+0

Это решило мои проблемы. Добавление «& declare = false» в конец моего URI помешало RabbitMQ создавать динамические привязки на бирже. – Bal

0

От Camel 2.16.1 дальше есть новый вариант для компонента rabbitmq, skipQueueDeclare, который правильно решает this issue.

Смежные вопросы