分布式消息服务RabbitMQ

预取值

2024-06-27 02:31:15

使用场景

所谓消息预取机制,它定义了在一个信道上,消费者允许的最大未确认的消息数量。

一旦未确认的消息数量达到了设置的预取值,RabbitMQ就停止传递更多消息,除非至少有一条未完成的消息得到了确认。

如何设置合适的预取值

通常,增加预取将提高向消费者传递消息的速度。虽然自动应答传输消息速率是最佳的,但是,在这种情况下已传递但尚未处理的消息的数量也会增加,从而增加了消费者的 RAM 消耗(随机存取存储器)应该小心使用具有无限预处理的自动确认模式或手动确认模式,消费者消费了大量的消息如果没有确认的话,会导致消费者连接节点的内存消耗变大,所以找到合适的预取值是一个反复试验的过程,不同的负载该值取值也不同 100 到 300 范围内的值通常可提供最佳的吞吐量,并且不会给消费者带来太大的风险。

预取值为 1 是最保守的。当然这将使吞吐量变得很低,特别是消费者连接延迟很严重的情况下,特别是在消费者连接等待时间较长的环境 中。对于大多数应用来说,稍微高一点的值将是最佳的。

设置预取值

设置预取值的java示例代码如下

ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.basicQos(20, false);


LcCgMWR.9eCg