我正在尝试将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());”在施工。
答案 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.
的所有属性。