Java八股文八:MQ消息队列

本文探讨了MQ消息队列在Java中的应用,包括削峰填谷、异步解耦的场景作用。针对消息重复消费,提出了实现幂等性的解决方案。在保证消息顺序执行上,建议在消费端维护内存队列。对于消息过期和积压问题,提出通过增加分区和消费者来加速消费。最后,详细阐述了如何在Kafka中确保消息的可靠性传输,包括消费者、服务端配置及生产者策略等措施。
摘要由CSDN通过智能技术生成

八、MQ 消息队列

1、场景作用

削峰填谷,异步解耦

2、如何保证消息不被重复消费呢?

这个问题可以换个思路,保证消息重复消费,其实是保证程序的幂等性。无论消息如何重复,程序运行的结果是一致的。比如消费消息后做数据库插入操作,为了防止消息重复消费,可以在插入前先查询一下有没有对应的数据。

3、怎么保证从消息队列里拿到的数据按顺序执行?

消费端在接收到消息后放入内存队列,然后对队列中的消息进行有序消费。

4、如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?

消息过期失效问题,如果消息一段时间不消费,导致过期失效了,消息就丢失了,只能重新查出丢失的消息,重新发送。 再来说消息积压的问题:(思路是快速消费掉积压的消息)

  • 首先排查消费端问题,恢复消费端正常消费速度。
  • 然后着手处理队列中的积压消息。
    • 停掉现有的 consumer。
    • 新建一个 topic ,设置之前 10 倍的 partation,之前 10 倍的队列。
    • 写一个分发程序,将积压的消息均匀的轮询写入这些队列。
    • 然后临时用 10 倍的机器部署 consumer,每一批 consumer 消费 1 个临时的队列。
    • 消费完毕后,恢复原有架构。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m78探索者

谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值