RabbitMQ丢失消息和重复消费问题

最近改了改自己的简历,然后试了试水,收到了很多面试邀请,于是去热热身,一来提升一下自己的语言组织能力,二就是给自己做一些查漏补缺,天天码业务代码有时候一些很简单基础的东西反而忘得干净。

今天随便面了一家小公司,经过一个多小时的面试,所有的问题都答的很流畅,但是在一个很简单的地方卡住了,面试官问了我一个问题:

RabbitMQ如何保证消息不重复消费?

这是一个很简单的问题,但是当时我想茬了,我想到了如何防止消息不丢失,然后一下没回忆起来,卡了一会。好在面试官提示了我如何做分布式幂等校验,我就顺着答了下去。

面试完之后,自然是觉得自己十分菜鸡,不得不重新复习了一下MQ的这一块内容,然后整理了一个笔记。

RabbitMQ保证消息不丢失

首先,要搞清楚RabbitMQ在哪些地方可能丢失消息:

  1. 生产者发送给MQ的时候丢失了。
  2. MQ收到了消息,但是发送给消费者的时候丢失了。
  3. 消费者收到了消息但是因为程序异常没有消费消息。
1.解决生产者消息丢失

解决生产者发送给MQ的消息不丢失,首先,我们可以用MQ的事务,在提交失败之后可以做事务回滚,然后重新提交,但是事务是串行的,性能不是很好,所以我们可以使用confirm模式来处理生产者的消息丢失问题,废话不说先上代码:

public class ConfirmProd {

    private static final Stri
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于 RabbitMQ 消息丢失消息积压和消息重复问题,一般可以从以下几个方面进行排查和解决: 1. 消息丢失: - 确保生产者成功发送消息RabbitMQ,可以通过确认机制(publisher confirms)来确保消息的可靠性发送。 - 确保消费者正确地从 RabbitMQ 接收消息并进行处理,可以使用消费者确认机制(consumer acknowledgements)来确保消息的可靠消费。 2. 消息积压: - 检查消费者的处理速度是否跟得上消息的生产速度,如果消费者处理速度较慢,导致消息积压。可以增加消费者数量或优化消费者的处理逻辑来提高消费速度。 - 调整 RabbitMQ 的队列参数,包括队列的最大长度、最大优先级等,以适应不同的场景需求。 3. 消息重复: - 在生产者端,可以使用唯一标识符来标记每条消息,避免重复发送相同的消息。 - 在消费者端,可以使用幂等性操作来处理消息,即使消息重复消费也不产生错误结果。例如,使用数据库的唯一键或者记录操作日志来避免重复处理。 此外,还可以考虑以下几点来提高 RabbitMQ 的可靠性和性能: - 使用持久化消息,确保消息RabbitMQ 服务器重启后不丢失。 - 配置合适的消息 TTL(Time-To-Live)时间,防止长时间积压过期消息。 - 使用合适的集群和镜像队列设置,提高 RabbitMQ 的可用性和容错性。 希望以上信息能对您有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值