一文帮你了解MQ
Java研发军团
共 1922字,需浏览 4分钟
·
2022-07-09 05:47
一、简介
![](https://filescdn.proginn.com/65919c9f4483b87a4fb451907f39e084/80d3e12269e25946ad67ef20c5791b36.webp)
![](https://filescdn.proginn.com/124c8e892f595ee4333229ca5586d227/26bcf7b71ba1a96fe27b01d8f008d67a.webp)
二、MQ的优势
![](https://filescdn.proginn.com/65919c9f4483b87a4fb451907f39e084/80d3e12269e25946ad67ef20c5791b36.webp)
(1) 解耦
(2) 异步
(3) 削峰
(4) 日志处理
![](https://filescdn.proginn.com/124c8e892f595ee4333229ca5586d227/26bcf7b71ba1a96fe27b01d8f008d67a.webp)
三、MQ的劣势
![](https://filescdn.proginn.com/65919c9f4483b87a4fb451907f39e084/80d3e12269e25946ad67ef20c5791b36.webp)
系统的可用性降低
系统的复杂性提高
一致性问题
![](https://filescdn.proginn.com/124c8e892f595ee4333229ca5586d227/26bcf7b71ba1a96fe27b01d8f008d67a.webp)
四、常见问题
![](https://filescdn.proginn.com/65919c9f4483b87a4fb451907f39e084/80d3e12269e25946ad67ef20c5791b36.webp)
(1) 怎么保证消息没有重复消费?使用消息队列如何保证幂等性
生产者:生产者可能会推送重复的数据到MQ中,有可能controller接口重复提交了两次,也可能是重试机制导致的 MQ:假设网络出现了波动,消费者消费完一条消息后,发送ack时,MQ还没来得及接受,突然挂了,导致MQ以为消费者还未消费该条消息,MQ回复后会再次推送了这条消息,导致出现重复消费。 消费者:消费者接收到消息后,正准备发送ack到MQ,突然消费者挂了,还没得及发送ack,这时MQ以为消费者还没消费该消息,消费者重启后,MQ再次推送该条消息。
状态判断:消费者把消费消息记录到redis中,再次消费时先到redis判断是否存在该数据,存在则表示消费过,直接丢弃 业务判断:消费完数据后,都是需要插入到数据库中,使用数据库的唯一约束防止重复消费。插入数据库前先查询是否存在该数据,存在则直接丢弃消息,这种方式是比较简单粗暴地解决问题
(2) 消息丢失的情况
(3) 消息的传输顺序性
先根据上一条Id去检查是否存在上一条消息还没被消费,如果不存在(消费后去掉id),则正常进行,如果正常操作 如果存在,则根据id到数据库检查是否被消费,如果被消费,则正常操作 如果还没被消费,则休眠一定时间(比如30ms),再重新检查,如被消费,则正常操作 如果还没被消费,则抛出异常
(4) 怎么解决百万消息积压问题
如果消息可以被丢弃,那么直接丢弃就好了 一般情况下,消息是不可以被丢弃的,那么这样需要考虑策略了,我们可以把原来的消费端重新当做生产端,重新部署一天MQ,再后面出现增加消费端,这样形成另一条生产-消息-消费的线路
作者:MicroStone123
来源:www.jianshu.com/p/4b46be5d0ab6
版权申明:内容来源网络,仅供分享学习,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!
END
推荐阅读
END
一键生成Springboot & Vue项目!【毕设神器】
Java可视化编程工具系列(一)
Java可视化编程工具系列(二)
顺便给大家推荐一个GitHub项目,这个 GitHub 整理了上千本常用技术PDF,绝大部分核心的技术书籍都可以在这里找到,
GitHub地址:https://github.com/javadevbooks/books
电子书已经更新好了,你们需要的可以自行下载了,记得点一个star,持续更新中..
![](https://filescdn.proginn.com/34e31144886a201d8095eae425a8a382/0b18a3c7eaedbced473dda6e18ca559e.webp)
顺便给大家推荐一个GitHub项目,这个 GitHub 整理了上千本常用技术PDF,绝大部分核心的技术书籍都可以在这里找到,
GitHub地址:https://github.com/javadevbooks/books
电子书已经更新好了,你们需要的可以自行下载了,记得点一个star,持续更新中..
评论