RabbitMQ介绍以及五种工作模式

版权声明:Arno https://blog.csdn.net/yu342107056/article/details/87884136

早期出现认证系统类似的提供认证服务;
出现了系统间的通信;并发的高需求
在这里插入图片描述

每个前端系统与认证系统的通信强耦合
传递消息,获取返回结果的过程,如果出现网络波动,整个传递数据,计算返回结果的流程重走一遍;需要一种技术,解决通信强耦合;
在这里插入图片描述
引入消息队列,实现连接的非阻塞监听,就能解决系统间通信强耦合
在这里插入图片描述

高并发情况下,将请求作为消息发送到队列缓存,由后台系统在空闲时慢慢处理;

消息队列解决问题
通信解耦
消峰限流(高峰期和低谷期过度)

RabbitMQ介绍

企业级别的消息队列,与大数据Kafka类似;

rabbitmq的结构
客户端:支持非常多的语言进行连接 生产消息端,消费消息端

rabbitmq的内部组件

队列:queue,消息存放的位置,可以实现队列本身的持久化,和消息的持久化;

连接逻辑

在这里插入图片描述
连接时创建2个对象
connection长连接,每个客户端消失前一直存在的不能频繁销毁创建
channel:信道基于connection创建的,可以快速创建,频繁的销毁;

交换机 exchange:

消息队列中的queue非常之多;
并发访问的压力/能力不能由客户端决定;
引入了中间核心组件交换机,所有客户端发送的消息必须交换机完成转发;
rabbitmq的交换机使用erlang语言开发的;

rabbitmq的五种工作模式

简单模式

在这里插入图片描述
1个生产者将消息交给默认的交换机(AMQP default)
2 交换机获取消息后交给绑定这个生产者的队列(关系是通过队列名称完成)
3 监听当前队列的消费者获取消息,执行消费逻辑
应用场景:短信,聊天

工作模式(资源争抢)

在这里插入图片描述
1 生产者将消息交个交换机
2 交换机交给绑定的队列
3 队列由多个消费者同时监听,只有其中一个能够获取这一条消息,形成了资源的争抢,谁的资源空闲大,争抢到的可能越大;
应用场景:抢红包,大型系统的资源调度
在这里插入图片描述

3 发布订阅(publish/fanout)

在这里插入图片描述
1 生产者扔给交换机消息
2 交换机根据自身的类型(fanout)将会把所有消息复制同步到所有与其绑定的队列
3 每个队列可以有一个消费者,接收消息进行消费逻辑
应用场景:邮件群发,广告

4 路由模式(routing/direct)

在这里插入图片描述

1 生产者还是将消息发送给交换机,消息携带具体的路由key(routingKey)
2 交换机类型direct,将接收到的消息中的routingKey,比对与之绑定的队列的routingKey
3 消费者监听一个队列,获取消息,执行消费逻辑
应用场景:根据生产者的要求发送给特定的一个或者一批队列;错误的通报;

5 topic主题模式

在这里插入图片描述
1 生产端发送消息,消息携带具体的路由key
2 交换机的类型topic
3 队列绑定交换机不在使用具体的路由key而是一个范围值
.orange. : haha.orange.haha,haha.haha.orange.haha
lazy.# : haha.lazy.haha.haha,layz.alsdhfsh(sh9ou)N0
*表示一个字符串(不能携带特殊符号) 例如 *表示 haha,item,update
#表示任意字符串

topic主题模式和路由模式区别:

路由模式中的queue绑定携带的是具体的key值,路由细化划分
topic主题模式queue携带的是范围的匹配,某一类的消息获取

多级传递时,上级消息队列结构接收的是范围内容,根据范围定义下级的具体执行逻辑

猜你喜欢

转载自blog.csdn.net/yu342107056/article/details/87884136