gpt4 book ai didi

java - RabbitMQ队列消费行为

转载 作者:行者123 更新时间:2023-12-04 02:44:55 25 4
gpt4 key购买 nike

我们有一个使用 Apache Camel (2.24) 从 RabbitMQ 服务器 (3.7.15) 使用的 Spring Boot (2.1) 应用程序。

应用程序似乎正在正确使用(逐条消息,因为它们被放置在队列中),但在 RabbitMQ 监视器中,它看起来像那些消息被“批量”使用(看到急剧下降然后变平,即使我们在日志中看到应用程序正在处理消息)。

我们还没有设置任何我能看到的“预取”行为。有人可以解释发生了什么吗?为什么队列数没有平稳下降?

rabbitmq management console

最佳答案

好吧,看起来默认预取值是无限的。如果你想限制它,你必须明确地配置它。

我没有找到证实这种印象的官方来源,但至少有一篇文章证实了这一点:https://www.cloudamqp.com/blog/2017-12-29-part1-rabbitmq-best-practice.html#prefetch

RabbitMQ default prefetch setting gives clients an unlimited buffer, meaning that RabbitMQ by default send as many messages as it can to any consumer that looks ready to accept them.

Camel component有一个选项 prefetchEnabled,默认为 false。但是,当我查看 RabbitConsumer class openChannel 方法中的 Camel 组件,这只是意味着消费者没有显式设置预取值

没有预取设置的消费者不一定是禁用预取的消费者,它是一个不关心预取的消费者(因此获得在其他地方定义的默认值)。

如果我没有忽略某些事情,Camel 选项 prefetchEnabled 的名称并不好。它应该被称为 limitPrefetch。这也将与 RabbitMQ docs 匹配:

... specifies the basic.qos method to make it possible to limit the number of unacknowledged messages on a channel (or connection)

结论:我怀疑 如果你想对 Camel 组件进行预取限制 你必须设置 prefetchEnabled 以及其他预取选项。否则没有限制(这基本上是有意义的,因为这会给你最大的吞吐量)。

关于java - RabbitMQ队列消费行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com