RabbitMQ概念原理流程工作模式等最全最详细最通俗易懂super star合集!

MQ定义

消息队列,强调消息和队列。

消息:生产者完成某一项业务,发送消息给交换器,代表,我完成了这个功能,接下来,该干什么,消费者自己来认领这个消息,然后消费。

队列:交换器将消息分发给各个消费者时,根据绑定的key,到自己的队列,然后按照先进先出原则由消费者进行消费。

工作原理

使用消息队列,重点在于合理的让消费者消费,消费者通过监听器,时刻监听着路由过来的消息,然后执行相应的操作。

工作流程

在这里插入图片描述
工作流程分为两个部分,一个是消息投递,一个是消费消息。

  • 消息投递

1、生产者和broker建立TCP连接并搭建通道。

2、生产者通过通道将消息发送给broker中的交换机。

3、交换机将消息根据需求投递到对应的队列。

  • 消费消息

1、消费者和broker建立TCP连接并搭建通道。

2、消费者监听对应的队列。

3、队列中有消息时,消费者进行消费。

工作模式

简单模式
在这里插入图片描述
竞争模式
在这里插入图片描述
广播模式
在这里插入图片描述
完全匹配模式
在这里插入图片描述
规则匹配模式

在这里插入图片描述

基础概念

channel

信道,消息的传递就是通过信道传递的。

exchange

交换机,对消息进行中转。交换机共有三种类型。

1、完全匹配(direct)。routing key与binding key必须完全一致,才能进行消息中转。

2、广播匹配(fanout)。交换机将消息广播到所有绑定的队列上。

3、规则匹配(topic)。和es的模糊查询类似,符合一定的规则就可以进行消息中转。

queue

队列,消息最终到达的地方,消费者进行获取消费的地方。

Routing Key

生产者在将消息发送给交换机时,指定routing key,指定这个消息的路由规则。

Binding Key

交换机指定binding key与消息队列进行联系。binding key用于匹配routing key。这两个key的图解如下。

在这里插入图片描述
·············································································
概念相关问题

问:

程序的起始就是建立TCP连接,虚拟连接建立在TCP连接之上,数据流动都是在channels中进行的。

我们完全可以使用TCP连接完成消息传递的功能,为什么不直接使用TCP连接,而要额外使用channels通道?

答:

因为TCP连接是有代价的,频繁的建立和关闭对系统性能有很大的影响,而且TCP的连接数有一定的限制。

而channels通道没有这种问题,生产者和消费者可以并发使用多个channels进行发布和订阅,一个TCP连接上,可以挂着很多通道。

RabbitMQ 优点

异步:

异步调用的例子,叫外卖,用户下单成功后,需要找外卖小哥进行配送,但是这个过程非常漫长,因为高峰时期,人员有限,不可能让用户卡在这个地方不动,所以使用消息队列,提高整条调用链路的相应速度。

解耦:

服务A是上游服务,负责产生数据,服务B,C需要对这些数据进行加工处理。

随着项目一期,二期,三期的不断开发维护,后边会出现服务D,服务E,这种一条龙服务的代码非常的臃肿,排查问题时,维护困难。

削峰:

秒杀系统中,瞬时高峰,可以将请求统一放到消息中间件中,队列处理。

消息队列场景

举几个例子

1、CSDN博客的积分系统,你明明已经发了新文章,为什么积分没有实时的增加呀,你好慢,因为你发布新文章这个消息,还在排着队呢,别着急。

2、大家都用过Github,你的密码忘记了,想要重置密码,然后会看到一个页面,显示预计几点几点,你的这个邮箱会收到一封邮件,为什么消息不同步呢,为什么没有及时的收到我们的信息呢,这其中就是消息中间件的作用,可能因为人太多或者有延迟或者网络原因等,所以网站反映比较慢,就会告知你一个时间,如果没有使用消息中间件的话,想象一下,是什么场景,你点击发送邮件,然后那个圈一直转啊转,转了十几分钟,终于不转了,然后告诉你发送成功。两种体验,一种直接告诉你预计时间,另一种转圈。

3、大家注册用户的时候,有时候会用到邮箱,让你接收一个邮件,但是这个邮件往往并不像短信验证码那么迅速,可能要等几分钟才能收到。

··············································································
你学废了吗

猜你喜欢

转载自blog.csdn.net/numbbe/article/details/109164222