赞
踩
过量的消息堆积可能会引起内存或磁盘告警,从而造成所有connection阻塞,进而影响到其他队列的使用,导致整体服务质量的下降。
1、生产速率较快,消费速率较慢:您可以通过以下方法解决。
2、消费者异常:建议排查消费者逻辑是不是有问题,优化程序。
3、消费者与队列间的订阅异常:建议排查队列和消费者之间的订阅是否正常。
4、消费端的代码本身逻辑耗费时间长:建议给消息设置过期时间,设置方法如下:
在生产消息时,设置消息过期时间。消息过期时间以expiration值体现。
在properties中设置expiration值,单位为毫秒(ms)。
- AMQP.BasicProperties properties = new AMQP.BasicProperties().builder()
- .deliveryMode(2)
- .contentEncoding("UTF-8")
- .expiration("10000")
- .build();
-
- String message = "hello rabbitmq";
- channel.basicPublish(exchange, routingKey, properties, message.getBytes(StandardCharsets.UTF_8));
在Web界面中设置expiration值,单位为毫秒(ms)。
登录Web界面,在“Exchanges”页签,单击Exchange名称,进入Exchange详情页。在“Publish message”区域,设置expiration值,如下图所示。
设置队列过期时间。队列过期时间以x-message-ttl值体现。从消息进入队列开始计算,超过了配置的队列过期时间,消息会自动被删除。
在客户端代码中设置x-message-ttl值,单位为毫秒(ms)。
- Map<String, Object> arguments = new HashMap<String, Object>();
- arguments.put("x-message-ttl", 10000);
- channel.queueDeclare(queueName, true, false, false, arguments);
在Web界面新建队列时,设置x-message-ttl值,单位为毫秒(ms)。
登录Web界面,在“Exchanges”页签,新建队列时 ,设置x-message-ttl值,如下图所示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。