java - 降低 Rabbit MQ 交付率

标签 java rabbitmq

我正在为我的应用程序使用 Rabbit MQ。有时由于维护,我需要停止我的消费者。因此,将有数千条消息在队列中等待。重启消费者后,消息传递率很高(每秒 500-600 条消息)。以这种速度,我的一位消费者无法处理消息并导致服务器崩溃。

我将来会更改消费者代码,但现在我需要一个快速的解决方案。

那么,有没有什么办法可以降低转换速度呢?我尝试了 basicQos 方法,但没有用。

注意:我正在为消费者使用 Java。

最佳答案

channel.basicConsume(queueName, false, consumer);
channel.basicQos(50);

consumer.getChannel().basicAck(delivery.getEnvelope().getDeliveryTag(), false);

前两行使自动确认为假并设置传递限制。第三行在消息处理完成后确认消息。这解决了我的问题。当自动确认为真时,消费者会从队列中获取消息,即使之前的消息处理未完成。这会导致内存问题和服务器故障。

关于java - 降低 Rabbit MQ 交付率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13449243/

相关文章:

java - urlrewrite.xml 似乎不起作用

java - 如何将SNMP与spring框架集成?

kubernetes - 错误 - 无法附加或安装卷 : unmounted volumes=[data]

java - 在instrumentation-spring-rabbit中,为什么brave要删除消息的标题?

rabbitmq - NServiceBus 和 Rabbit MQ 或 Kafka

java - 如何为 mule 入站端点指定超过 1 个内容类型

java - 在 tomcat server.xml 中配置 SSL 密码,如 ${keystore.password}

nginx - 通过 HTTPS 和 Nginx 进行 RabbitMQ 管理

java - JMS 连接到没有任何特定库的队列

java - 压缩和解压缩输入流中的字节 block