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