消息队列(MQ)

本文介绍了消息队列(MQ)的基本概念,包括其解耦、削峰和异步处理的特性,并讨论了在高并发、高可用和高性能场景下的应用。同时,分析了传统串行设计与并行处理调优的对比,以及MQ的两种流派。文章还探讨了MQ常见的问题,如消息堆积、重复消费、消息丢失和消费顺序一致性,并提出了相应的解决方案。
摘要由CSDN通过智能技术生成


————————————————————————————————

什么是消息队列

定义

消息队列:一般我们会简称它为MQ(Message Queue)。
【消息队列就是一个存放消息的队列】
Message QueryMQ),消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦,mq主要用于异步操作,这个不是mq的真正目的,只不过是mq的应用,mq真正的目的是为了通讯。
他屏蔽了复杂的通讯协议,像常用的dubbo,http协议都是同步的。
这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。mq做的就是在这些协议上构建一个简单协议——生产者、消费者模型,mq带给我们的不是底层的通讯协议,而是更高层次的通讯模型。他定义了两个对象:发送数据的叫做生产者,接受消息的叫做消费者,我们可以无视底层的通讯协议,我们可以自己定义生产者消费者。

复习一下队列。

队列是一种先进先出的数据结构(线性结构)。和他相似的还有栈(先进后出)。

补充:

使用队列的还有一个场景就是线程池队列:有界队列和无界队列。用来存储任务。

消息队列:
有两个名词—生产者、消费者
生产者——生产新建
消费者——消费使用

消息队列的特性:

异步、削峰、解耦

1、解耦:

业务模块之间没有关联,一个服务挂掉不会影响其他业务,可以通过后续补偿或者分布式事务解决。
缺点:事务问题,只要使用消息队列,都会面临事务问题(无法保证原子性)。分布式事务解决框架。分布式事务般都遵循最终一致性。
就像高可用里面说的一样,发淘金币服务挂了,关下单什么关系,发淘金币服务挂了,我还是可以正常下单,只不过后期可以数据补偿或者分布式事务去解决这个问题。

2、削峰:

比如说我平时服务就只能支撑几万的qps,像淘宝京东那种秒杀,那时候服务突然打进来(如果采用第二种方案)那服务就会直接被压死了。但是如果采用消息队列,这秒杀进来的所有的请求都不会直接打到具体服务上,都会先打到消息队列里,然后我后面的服务再慢慢消费。
可以看看淘宝京东双11秒杀的时候,是不是有的时候慢是慢了点,但是服务起码没挂。等我秒杀结束之后,服务还能正常运转。
消息队列就像是一个三峡大坝,用来拦截上游给的压力。

3、异步:

连接消息队列的服务可以异步去执行。而且每次多增加一个步骤,我下单的代码是不平要动的,只需要再增加一个消费者即可。

使用场景

消息队列的三个最主要的作用是:异步、削峰、解耦,一定要烂熟于心。

传统串行化设计

先看看传统的设计(如果说业务体量小,并发不大,可以使用这种设计)
客户

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值