「第62期」-消息队列-架构为什么需要用消息队列

Posted IparhanGeek

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「第62期」-消息队列-架构为什么需要用消息队列相关的知识,希望对你有一定的参考价值。

「第62期」-消息队列-架构为什么需要用消息队列

听着音乐 补充知识

「第62期」-消息队列-架构为什么需要用消息队列


温馨提示:

                读完本篇文章可能需要12分钟。

架构设计

准备篇

   

做到高质量和通俗易懂的好文章是我的目的     


    谈到消息队列那些做过高并发,秒杀场景的编程人员都不陌生,但是这里有个问题我们到底为什么需要用这个东西,是因为大家都推荐?如果你用的目的真是这样那你的架构也没什么优点了,因为你的出发点就有问题,这个情况下你把架构的算法和代码写的再漂亮也毫无用处,还是因为你的出发点的思维就有问题,我们平时设计架构应该多问问自己和跟团队其他技术人员多沟通目前这个功能我们到底为什么要使用某个框架或是技术点,这样就会少走些弯路和节省成本,再提醒一遍千万不要跟着市场设计自己的项目架构


正题:为什么需要用消息队列


    如果您的项目是比较小的项目就谈不到高并发,那也就谈不到队列也就更讨不到会使用消息队列,如果你属于这种情况那就不需要看此文章,效果不好

1
 原因:解耦

「第62期」-消息队列-架构为什么需要用消息队列

    各位看完下面的图片不需要解释太多就能了解一些问题,A调用B,B调用C 如果期间某一个项目处于崩溃或者更改数据,想想一下这种情况你的系统会怎样,显然直接出问题,这也就像LaTex的作者Leslie Lamport说:“分布式系统就是这样一个系统,系统中一个你甚至都不知道的计算机出了故障,却可能导致你自己的计算机不可用。”,这就是问题之一,就说不要轻易把你项目和系统设计成分布式,如果非要设计分布式那你就要做好一切心理准备。那如果你的项目和系统已经是一个分布式的话 那就可以试试里面接入消息队列系统来减轻你服务器的压力。


2
原因 :异步( asynchronous)

其实异步方式有点像解耦模式就是最高经度的提供CPU性能和项目速度比如看下面的参考图:

「第62期」-消息队列-架构为什么需要用消息队列

    上面的第一种传统模式和第二种模式情况如果比如说你的CPU吞吐量和性能都差不多的话自己可以想象一下速度和并发量(这里主要并发为目的)。


消息队列工作原理

「第62期」-消息队列-架构为什么需要用消息队列


    看完上面的参考图也能更加深刻理解消息队列的作用了,也顺便能了解它的的基本工作原理了,说白了它就是中间件,有点像CDN内容分发的原理,ok,写了这么多手都有点累了,这里小小的温馨提示千万不要把消息队列看的那么奥神或者很神秘,其实你理解它基本工作原理你就能很快知道自己需要做什么了。


消息队列框架列表


「第62期」-消息队列-架构为什么需要用消息队列

    看这么多框架也不要紧,我前几期一直在情调一个概念,编程学思维别学本身,就像这个也是要学习消息队列技术而不是里面的每一个框架,因为也是纯碎浪费时间(除非想多做一些功课和项目需求),如何选择跟自己项目匹配的框架就先看每个框架的白皮书,就是每个框架的作者为什么这么设计这个框架,里面能知道很多知识可以根据再选择一个适合自己的框架,这样的情况大部分错不了,比每个框架都挨个学一遍再选择更好


Rabbit MQ  剖析,入门和实战


    谈到这里对消息队列也不怎么陌生了吧,那就为了更加深刻我就来一个实战项目,里面遇到的问题,问题怎么解决的都一一都写出来,至于我为什么首先选择了Rabbit MQ 为我的消息队列框架,文章后面会提到,比如我之后可能消息队列也做成不同几个Master-slave模式这个情况还会需要别的框架来体现作用了,别的先看实战情况吧。


1
Rabbit MQ 扯皮 

「第62期」-消息队列-架构为什么需要用消息队列

    根据官网提示安装Rabbit MQ 前必须得有Erlang语言环境,因为这是Erlang语言开发的框架,之后就可以安装和使用了


    如果你不用Docker容器模式的话可以试着去下载到你的服务器,不过我还是推荐使用容器模式(容器模式隔离型好),我之前不用Docker的时候也是安装在服务器磁盘上,本篇文章会只要是关于安装的都会使用Docker容器模式,如果还是需要安装在服务器上的朋友可以自行百度或者加我微信(微信:13717504022)咨询就好,我把所有的资料笔记在我的为知笔记里面了,会发送给你


2
 Docker + Rabbit MQ 安装

    第一步,首先还是查找Rabbit MQ的镜像:

「第62期」-消息队列-架构为什么需要用消息队列

第二步,选择一个镜像再去拉去和使用

docker pull rabbitmq:3.7.7-management

「第62期」-消息队列-架构为什么需要用消息队列

第三步,启动一个容器来使用,下面命令:

docker run -d --name rabbitMQ_master -p 5672:5672 -p 15672:15672  --hostname rabbitMQ_master -e RABBITMQ_DEFAULT_VHOST=rabbitMQ_master -e RABBITMQ_DEFAULT_USER=iparhan -e RABBITMQ_DEFAULT_PASS=xj420809 rabbitmq:3.7.7-management

「第62期」-消息队列-架构为什么需要用消息队列

第四步,查看结果:


3
RabbitMQ + SpringBoot + Docker 实战

我们接下来实战一个实际需求来更加深刻对RabbitMQ的理解吧,

其余的下一篇「消息队列」的文章再深入吧=====


END

IparhanGeek

海赛尔


以上是关于「第62期」-消息队列-架构为什么需要用消息队列的主要内容,如果未能解决你的问题,请参考以下文章

十二张图,踹开消息队列的大门 | 极客分享第 38 期

22期为什么需要消息队列?使用消息队列有什么好处?

为什么要用消息队列,有什么好处?

消息中间件系列第1讲:为什么要用消息队列?

消息队列MQ

高并发架构系列:MQ消息队列的12点核心原理总结