Apache camel 避免使用RabbitMQ和Camel自动绑定

Apache camel 避免使用RabbitMQ和Camel自动绑定,apache-camel,rabbitmq,Apache Camel,Rabbitmq,我正在尝试使用RabbitMQ和Camel。我使用的是Camel 2.14.1 我想在RabbitMQ上打开一个扇出交换,然后稍后将队列绑定到它。这似乎很有效。但是,每次创建Exchange时,它都会自动绑定到带有系统名称(数字)的队列。我不能避免吗? 下面是一个简单的示例,它向一个Exchange发送100条消息。但它们会被传递到一个自动创建的队列中,我想避免这种情况 @Override public void configure() throws Exception {

我正在尝试使用RabbitMQ和Camel。我使用的是Camel 2.14.1

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

  }
致以最良好的祝愿, 莫滕·努森

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

如果不想将exchange与队列绑定,可以将declare选项设置为false。顺便说一句,declare选项是自Camel 2.14.0以来新添加的。

从Camel 2.16.1开始,rabbitmq组件有一个新选项,
skipquedeclare
,它正确地解决了问题。

正如Bal已经描述的,将“
declare=false
”添加到rabbitmq URI中。这应该能解决你的问题。 或者,您还可以在URI中使用“
skipquedeclare=true&skipquebind=true
”此属性

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

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

skipqueebind
:如果为true,队列在声明后将不会绑定到exchange


您可以访问Camel for RabbitMQ中可以使用的所有属性这解决了我的问题。将“&declare=false”添加到我的URI的末尾可以防止RabbitMQ在exchange上创建动态绑定。谢谢!解决问题!