在rabbitmq中,预取计数与无确认有什么区别?

zengzsys  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(3)|浏览(136)

我需要知道在rabbitmq中预取计数与无确认之间的区别是什么?
还有以下语句之间的区别是什么:-
如果我设置预取计数,比如说10,是否会创建10个消费者线程?或者--
如果我注册了10个消费者,是否会创建10个线程?
以上哪一项更有效

mum43rcc

mum43rcc1#

要回答这个问题,请专门针对spring-amqp。
prefetchCount=10表示代理允许每个消费者最多10个未确认消息;它不会影响线程的数量。
使用concurrentConsumers创建多个消费者-每个消费者将有一个线程。
自动确认意味着代理不需要确认(因此可能会丢失消息)。如果监听器跟不上,SpringAMQP也会阻止传递(以达到预取计数)。

hsgswve4

hsgswve42#

预取计数:使用者应从队列中读取并在内部保留多少条消息,而不是一次选取一条消息。
No-Ack:不确认使用者已使用完消息。
这两个都是用来微调您的设置
回答你问题的第二部分:如果将预取计数设置为10,则不会创建10个使用方,但单个使用方一次将提取10封邮件。
如果你创建10个消费者,它很可能会创建10个线程(或进程),这完全取决于你如何配置它。

osh3o9ms

osh3o9ms3#

我知道这个问题已经很久了,但有一部分问题从来没有得到过明确的回答,所以对于后来来这里寻找答案的人:
如果您不希望在确认之前的消息后立即向您发送新消息,而是希望仅在您明确请求消息时才向您发送消息,那么您根本就不需要设置“消费者”(RabbitMQ术语);具体来说,您将希望使用AMQP的basic.get操作(它只获取单个消息,而不创建消费者),而不是更常见的basic.consume操作(它注册一个消费者,当消息可用时将向该消费者发送消息)。
不同的库和框架将有不同的方法来实现这一点;例如,在Ruby中,使用Bunny客户机,可以调用message = queue.get而不是queue.subscribe do ...,在Spring中,可以执行类似GetResponse response = channel.basicGet("some.queue", false);的操作。

相关问题