【消息队列_1】消息队列入门: 从糖果厂老板来了解消息队列

泪湿孤枕 提交于 2020-01-18 04:55:35

引言

如果你想了解消息队列,那么欢迎你读下去

消息队列一词相比各位都多有耳闻,就算你没有用过你也知道 队列 吧。
考试时,面试时都经常会被问到 队列和栈有什么区别? 99%的同学都能答出来栈是先进后出,而队列是先进先出。
那消息队列是什么呢?他又有什么作用?


🍬糖果厂老板的例子

来,让我们从一个家具厂的例子来了解消息队列

话说方老板开了一家糖果厂,为了方便管理,他将厂分为两个车间:加工车间和包装车间
加工车间主要负责将加工制作成散装糖果
包装车间主要负责将糖果称重检查并包装

一般来说,加工车间的工人会将加工好的糖果运送到包装车间
但一来二去方老板发现,加工车间的工人在运输糖果🍬去包装车间的时候
就不得不停下手中的活,将糖果送过去再回来继续加工
这大大降低了生产的效率

怎么办呢?

方老板在两个车间之间装了一条传送带,加工车间只需要将加工完的糖果放到传送带上
就可以接着去加工了,包装车间直接从传送带上去取糖果。这样大大提升了效率

但是不久又出现了新的问题:
加工车间动作太快了,包装车间上一批还没包装完,这一批就已经到了

怎么办呢?

方老板在包装车间旁开出开一块糖果冷藏室,用来保存加工车间加工完的糖果
包装车间只需要从冷藏室取糖果就好

方老板不知不觉完成了一个消息队列
在这里插入图片描述
为解决效率问题: 他在两个车间(程序)间加了传送带
为解决加工包装不一致的问题: 他在两个车间(程序)间加了存储仓库

在上面的模型中,加工车间就是消息生产者,生产未进行包装的糖果
包装车间就是消息消费者,消费冷藏室里的未包装糖果
而 履带和冷藏室 共同组成了消息队列

通过糖果厂的例子不难得出结论:
消息队列 解决了应用间的通信问题,有传送带般收发消息的作用
消息队列 存储消息,如上述例子的贮藏室


消息队列的作用

1、异步

借用方老板的例子,通俗来说,异步就是:

加工车间的工人不必亲手将糖果🍬交到包装车间工人的手上
只需要把未包装的糖果放上传送带,就接着去加工糖果了

第一次用消息队列是在自己的一个秒杀项目上

生产消息'''''
消费消息'''''
库存..
消息队列....
订单..

为什么要用到消息队列呢?这里的消息队列就起着一个异步的作用
提升用户体验,更快的返回结果

2、削峰

还是自己之前的秒杀项目
为了避免大量的秒杀请求压垮服务器,当网关层接收到秒杀请求之后将请求发送至消息队列,后台真正处理秒杀的服务依据自身能力从消息队列取消息消费

生产消息'''''
消费消息'''''
网关..
消息队列....
秒杀服务....

3、服务间解耦

不难看出,消息队列具有通信的功能,其也有服务间解耦的能力,上面连个例子,基本都能看做是两个服务,通过消息队列通信解耦开来

4、微服务的发布和订阅、广播等

对于下游的消费者来说,其消费消息队列的消息,就像观察者模式中的观察者一样
反之,向队列中生产数据的消息生产者,等同于观察者模式中的被观察者

与java简单的直接用接口进行观察者和被观察者"通信"不同的是:
其是通过消息队列来”通信“的,生产者发布,消费者订阅

既然可以1对1,那消息队列也就可以支持1对多的广播形式

生产消息'''''
消费消息'''''
消费消息'''''
消费消息'''''
订单..
消息队列....
邮件..
短信..
仓库..

以上就是一个简单的通过消息队列进行的广播

总结

消息队列的作用
  1. 异步化
  2. 解耦
  3. 削峰、流量控制
  4. 发布订阅,广播、服务间通信等
消息队列的不足
  1. 强制异步
  2. 消息延迟
  3. 复杂
  4. 可能出现丢消息的问题,造成数据不一致

今天分享了自己对消息队列的所学,带小白了解了一下消息队列,后面会陆陆续续增加关于消息队列的分享,以上所写,若有问题欢迎交流指正【抱拳】

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!