避免使用RabbitMQ和Camel自动绑定

时间:2014-12-18 15:48:20

标签: apache-camel rabbitmq

我正在尝试将RabbitMQ与Camel一起使用。我使用的是Camel 2.14.1。

我想在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");

  }

祝你好运, 莫滕克努森

更新 从查看源代码看,如果RabbitMQEndPoint中的“队列”不为空,则会触发自动队列。但是“queue”会自动分配给“String.valueOf(UUID.randomUUID()。toString()。hashCode());”在施工。

3 个答案:

答案 0 :(得分:3)

如果您不想将交换与队列绑定,可以将declare选项设置为false。 BTW,声明选项是自Camel 2.14.0以来新添加的。

答案 1 :(得分:0)

从Camel 2.16.1开始,rabbitmq组件skipQueueDeclare有一个新选项,可以正确解决this issue

答案 2 :(得分:0)

如Bal所述,here在您的RabbitMQ URI中添加“ declare=false”。这应该可以解决您的问题。 (可选)您也可以在URI中使用“ skipQueueDeclare=true&skipQueueBind=true”此属性。

declare如果该选项为true,则骆驼声明交换名和队列名并将它们绑定在一起。如果该选项为false,则骆驼不会在服务器上声明交换名称和队列名称。

skipQueueDeclare如果为true,则生产者将不会声明并绑定队列。可以用于通过现有的路由密钥定向消息。

skipQueueBind如果为true,则在声明队列后将不会将其绑定到交换上

您可以找到可在Camel中用于RabbitMQ here.

的所有属性。