简而言之,它看起来像是默认预取值为无限制。如果你想要限制它,你必须显式地对其进行配置。
我没有找到官方的来源来确认这个印象,但至少有一篇文章能够证实:https://www.cloudamqp.com/blog/2017-12-29-part1-rabbitmq-best-practice.html#prefetch
RabbitMQ默认的预取设置给客户端提供了一个无限制的缓冲区,这意味着RabbitMQ默认地向任何看起来准备好接受它们的消费者发送尽可能多的消息。
Camel组件有一个选项 prefetchEnabled
,默认情况下为 false
。然而,当我查看 Camel 组件中的RabbitConsumer
类的 openChannel
方法时,这仅意味着消费者不会显式设置预取值。
没有预取设置的消费者不一定是禁用预取的消费者,它是一个不关心预取的消费者(因此获得在其他地方定义的默认值)。
如果我没有忽略什么,Camel选项prefetchEnabled
没有一个好的名称。它应该被称为limitPrefetch
。这也符合RabbitMQ文档的描述:
...指定了 basic.qos 方法,使得 可以限制 频道(或连接)上未确认消息的数量
结论:我怀疑,如果你想要使用 Camel 组件的预取限制,则必须同时设置 prefetchEnabled
和其他预取选项。否则就没有限制(这基本上是有意义的,因为这会给你最大的吞吐量)。
from("rabbitmq://localhost:5672/delete.Tenant?queue=tenant&declare=false&autoAck=false&threadPoolSize=20&concurrentConsumers=20&prefetchEnabled=true&prefetchCount=100")
prefetchEnabled = false
可能会产生误导。 - burki