RabbitMQ和Camel 2.20自动确认即使autoAck = false

时间:2018-02-23 05:48:20

标签: java rabbitmq apache-camel

我是Camel和RabbitMQ的新手,正在编写一个简单的消费者,使用以下路线

  from("rabbitmq://127.0.0.1?username=admin&password=admin&queue=TestQueue&routingKey=TestQueue&exchangeName=''&autoAck=false&autoDelete=false").delay(3000).bean(exceptionBean,"throwGenericException").log(LoggingLevel.INFO, "Receiving from the Queue: ${id}");

Bean没有代码,只是抛出异常。我的问题是,即使在从bean中抛出异常之后,消息也会在队列中自动确认。

  1. 在这种情况下我缺少什么?处理这个问题的最佳方法是什么? 失败?
  2. 为什么骆驼会在路线的最后确认它?。

    任何指针都表示赞赏。

2 个答案:

答案 0 :(得分:0)

也许你的例外是因为参数exchangeName不存在,

尝试像这样调用你的RabbitMQ:

from("rabbitmq:{{RABBITMQ_ADDRESS}}/{{RABBITMQ_EXCHANGE}}?routingKey={{RABBITMQ_QUEUE_IN_ROUTING_KEY}}&username={{RABBITMQ_USERNAME}}&password={{RABBITMQ_PSWD}}&autoDelete=false&queue={{RABBITMQ_QUEUE_IN}}")

答案 1 :(得分:0)

查看此链接

https://gist.github.com/mgyongyosi/fa71a52da65a9dd3cddd537fb4feca66

该路由需要将setFaultBody设置为true才能不自动确认。试试上面的示例,它将为您提供一个思路。

问候 Aravind