首页 > 解决方案 > 使用 RabbitMQ 和 Camel 一条一条地消费消息

问题描述

我有一个 RabbitMQ 代理和一个使用消息的 Camel Java 应用程序。消费者在 ca 中处理一条消息。1秒。我产生 10'000 条消息;这几乎是瞬间的。RabbitMQ 控制台立即报告队列不包含更多内容。7'000 条消息。这对我来说是个问题,因为如果消费者失败,大约有 3'000 条消息会丢失。

我尝试了几种选择:

一切都无济于事。我从来没有观察到队列中的消息数量有规律地减少(10'000,然后是 9'999,9'998 等)。恰恰相反:我总是可以看到消息以大块的形式从队列中出来(通常是 3'000 条消息),尽管消费者实际上处理它们的速度很慢。

如何一一消费消息?

标签: rabbitmqapache-camelthrottlingconsumer

解决方案


我知道这对你来说可能有点太晚了,但我也一直在与同样的问题作斗争,我终于找到了一个解决方案,让 Camel RabbitMq 组件一个一个地消费消息。

您只需将autoAck属性设置为false.

下面我有整个路线定义的示例:

rabbitmq:your-exchange?routingKey=rtkey&queue=qname&autoDelete=false&durable=true&guaranteedDeliveries=true&threadPoolSize=1&autoAck=false

那么重要的部分就是:

guaranteedDeliveries=true&threadPoolSize=1&autoAck=false

threadPoolSize和属性不是实现您想要的东西所必需的guaranteedDeliveries,我只是为了完整起见将它们放在这里。

这是文档的链接


推荐阅读