消息队列学习笔记

本文探讨了消息队列作为中间件的核心概念,包括其在解耦、异步处理和削峰中的作用。还介绍了如何确保消息的可靠性,涉及生产者-MQ确认、MQ存储与消费者确认机制,以及顺序消费和重复消费的解决方案。
摘要由CSDN通过智能技术生成
什么是消息队列?

就是一个中间件,可以用来线程或者进行间进行消息的传递。

消息队列解决了什么问题?

解耦,异步和削峰

解耦:在单机系统中,每个模块之间是耦合的,需要考虑发给谁,谁来取数据,并且消费失败,功能就无法正常完成,所以需要消息队列来解耦。

异步:在系统的服务链越来越长之后,一次请求的调用时间会越来越长,异步可以让那些相对不重要的服务延迟处理,快速响应请求。

削峰:因为mysql的处理能力能力没只有3000左右,如果不削峰,可能会造成数据库崩溃。

MQ给MYSQL快,因为在持久化中,MQ是顺序写,而mysql是随机写

如何解决消息的可靠性?消息不丢失

有三个阶段:

生产者到MQ:主要利用一个confirm机制,就是MQ收到消息之后会给一个回调,表示发送成功,然后发送失败放缓冲这一类的

MQ本身存储信息:配置消息持久化,集群模式,镜像模式

MQ到消费者:这一阶段有两种模式,一种是同步确认和异步确认

1.同步确认,就是消费者接收到消息之后会进行回调,表示消息接收成功了,这种的话有可能会消费失败,用在对安全性不高的场景下

2.异步确认:等到消费者消费完消息之后,才发送一个回调给MQ, 这种会出校超时重发,然后重复消费问题,用在比较重要的场景,如银行转账之类的场景,可以通过redis等幂等性校验来解决重复消费问题。

顺序消费?

只能做到局部有序,不能做到全局有序

实现就是把消息都放到一个队列里面,可以利用hash来取模

重复消费?

重复消费无法避免,因为要保证消息的可靠性,然后就会超时重传,可以利用mysql的唯一约束,或者redis 幂等,分布式锁等解决这个问题

消息积压?
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值