消息队列的介绍

1.什么时候会用到消息队列?

公司本身业务小,可以做单体的,但是后面业务体量不断扩大,采用微服务的设计思想分布式的部署方式,所以拆分了很多的服务,随着体量的增加以及业务场景越来越复杂了,很多场景单机的技术栈和中间件以及不够用了,而且对系统的友好性也下降了,最后做了很多技术选型的工作,此时就需要引入消息队列中间件

2.什么是消息队列?

消息队列:在消息的传输过程中保存消息的容器。

队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列保留消息直到可以成功地传递它

提到消息队列就要想到异步、削峰、解耦 ,就像是提到面向对象会想到封装,继承,多态一样,形成条件反射的那种┗|`O′|┛ 奥~~

接下来一步步的说做异步,削峰,解耦

3.异步处理

场景:我们在进行淘宝购物的时候,平时的购物流程都是

 中间只会有是支付处理占用时间

当然这样的流程在我们的生活中被应用的已经是少数的了~

我们在进行购物的时候不只是会有下单系统,还会出现积分系统,短信通知系统,优惠券系统等等。。。

这个时候我们就需要用到异步处理,这是为什么呢,请看下图

 假如支付本来100ms可以完成的事,同步处理的话现在这样的流程下来是不是需要500ms

等我用你的软件买下来黄花菜都凉了~

更何况实际的购物流程列举出来的还要多~ o(* ̄▽ ̄*)o

上面的流程其实可以同时做的呀,你支付成功后,我去校验优惠券的同时我可以去增减积分啊,还可以同时发个短信啊。

 这样就可以优化速度啦~

在此我的下意识感觉可以用线程,线程池,阿西吧实际上这种下意识是错误滴

一个订单流程,扣积分,扣优惠券,发短信,扣库存。。。等等这么多业务要调用这么多的接口,每次加一个你要调用一个接口然后还要重新发布系统,写一次两次还好,写多了系统不崩人先崩了,这样的情况不出错还好,出错就是跟bug地老天荒。既然用到了消息队列,就不能跟bug地老天荒,接下来就是

4.应用解耦

你下单了,你就把支付成功的消息告诉别的系统,他们收到了去处理就好了,只用走完自己的流程,把自己的消息发出去,那后面要接入什么系统简单,直接订阅你发送的支付成功消息,你支付成功了我监听就好了。只要自己的流程是成功的就好,管别人的咋样呢bug漫天飞也不影响你嘞~

这是消息队列的缺点一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。

5. 流量削锋

应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

  • 可以控制活动的人数
  • 可以缓解短时间内高流量压垮应用
  • 用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面
  • 秒杀业务根据消息队列中的请求信息,再做后续处理

6.MQ选型对比文档

 关于选择那个去做消息队列就看具体的需求啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值