我需要知道在rabbitmq中prefetch count与no ack之间的区别是什么?
另外 以下陈述之间有什么区别: -
如果我设置了预取计数,那么10会创建10个消费者线程吗? 或者 -
如果我注册10个cosumers会创建10个线程吗?
以上哪项更有效
答案 0 :(得分:6)
专门针对spring-amqp回答这个问题。
prefetchCount=10
表示经纪人为每个消费者提供最多10条未包装消息;它不会影响线程数。
使用concurrentConsumers
创建多个消费者 - 每个消费者都有一个帖子。
auto ack意味着代理不需要确认(因此您可以丢失消息)。如果监听器无法跟上,Spring AMQP还会阻止交付(预取计数)。
答案 1 :(得分:3)
预取计数:消费者应从队列中读取并保留多少消息,而不是一次选择一条消息。
No-Ack:不要回复消费者已完成消费。
这两者都用于微调您的设置
解决问题的第二部分: 如果您将预取计数设置为10,则不会创建10个消费者,但您的单个消费者将一次获取10个消息。
如果你创建10个消费者,它很可能会创建10个线程(或进程)。这一切都取决于你如何配置它。很可能你会想要使用线程池