【我们一起来学 RabbitMQ 一 】RabbitMQ 的基本介绍
【我们一起来学 RabbitMQ 一 】RabbitMQ 的基本介绍
嗨,大家好,我是小魔童哪吒,咱们从今天开始进入开源组件的学习,一边学习一边总结一边分享
文章提纲如下:
- RabbitMQ 简单介绍及使用
- RabbitMQ 的六种工作模式
文章图片
RabbitMQ 简单介绍
RabbitMQ 是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。AMQP 是什么?
高级消息队列协议
,它使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能客户端应用可以通过这个协议与消息代理和它实现的
AMQP
模型进行交互通信MQ 是什么?
全称
Message Queue
, 即消息总线是一种跨进程、异步的通信机制
用于上下游传递消息,由消息系统来确保消息的可靠传递。
RabbitMQ 一般使用在什么场景?
- 错峰流控
- 保证数据的最终一致性
- 上下游逻辑解耦
- 具体的使用场景与下面说到的
RabbitMQ
的六种工作模式息息相关
文章图片
- 消费者
- 生产者
Broker:
Virtual Host
标识一批交换机、消息队列和相关对象
虚拟主机是共享相同的身份认证和加密环境的独立服务器域
每个
vhost
本质上就是一个mini版的RabbitMQ
服务器,拥有自己的队列、交换器、绑定和权限机制Exchange
Queue
它是消息的容器,也是消息的终点
一个消息可投入一个或多个队列
消息一直在队列里面,等待消费者连接到这个队列并将它取走
Banding
一个绑定就是基于路由键将交换机和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表
Channel
信道是建立在真实的
TCP
连接内地虚拟链接,AMQP
命令都是通过新到发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成的,为了复用一条TCP连接Connection
Publisher
也是一个向交换器发布消息的客户端应用程序
Consumer
表示从一个消息队列中取得消息的客户端应用程序
Message
消息体是不透明的,而消息头则是由一系列的可选属性组成
这些属性包括如下参数
routing-key
(路由键)priority
(优先级)delivery-mode
(消息可能需要持久性存储[消息的路由模式])
- RabbitMQ
- Kafka
- ActiveMQ
- ZeroMQ
- RocketMQ
咱们来看看
RabbitMQ
的特点可靠性
RabbitMQ
使用了 持久化、传输确认、发布确认 等 机制来保证可靠性灵活的路由
Exchange
来路由消息对于典型的路由功能,
RabbitMQ
已经提供了一些内置的Exchange
来实现对于复杂的路由功能,
RabbitMQ
可以将多个Exchange
绑定在一起,也通过插件机制实现自己的Exchange
消息集群
高可用
多种语言客户端
Java、.NET、Ruby、GO
等管理界面
跟踪机制
插件机制
RabbitMQ 的六种工作模式 图片来源于 RabbitMQ 官方文档 https://www.rabbitmq.com/gets...
simple 简单模式
简单的消息生产者和简单的消费者的关系,生产者生产消息,放到队列中,消费中消费队列中的消息
文章图片
- 消息产生者将消息放入队列
- 消息的消费者监听消息队列,如果队列中有消息就消费掉
work 工作模式
多个消费端消费同一个队列中的消息,队列采用轮询的方式将消息是平均发送给消费者,此处的资源是竞争关系
文章图片
- 消息产生者将消息放入队列,这里的消费者可以有多个
消息被消费者C1,C2共同争抢当前的消息队列内容,谁先拿到谁负责消费消息
这里就会有这样的问题,同一个消息会被不同的消费者都消费掉,我们需要处理这种问题
可以设置一个开关,
syncronize
,保证一条消息只能被一个消费者使用- 用于场景
- 红包场景
- 大型项目中的资源调度
publish/subscribe 发布订阅模式 , 相对于Work queues模式多了一个交换机,此处的资源是共享的
生产端先把消息发送到交换机,再由交换机把消息发送到绑定的队列中,每个绑定的队列都能收到由生产端发送的消息
文章图片
- X 代表交换机
RabbitMQ
内部组件,每个消费者监听自己的队列 - 生产者将消息发给
broker
,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收
到消息 - 用于场景
- 邮件群发
- 群聊天
- 广播(广告等)
文章图片
- 每个消费者监听自己的队列,并且设置带统配符的
routingkey
- 生产者将消息发给broker,由交换机根据
routingkey
来转发消息到指定的队列
生产者处理流程:
声明队列并声明交换机 -> 创建连接 -> 创建通道 -> 通道声明交换机 -> 通道声明队列 -> 通过通道使队列绑定到交换机并指定该队列的routingkey(通配符) -> 制定消息 -> 发送消息并指定routingkey(通配符)
消费者处理流程:
声明队列并声明交换机 -> 创建连接 -> 创建通道 -> 通道声明交换机 -> 通道声明队列 -> 通过通道使队列绑定到交换机并指定routingkey(通配符) -> 重写消息消费方法 -> 执行消息方法
Topics 模式实际上是路由模式的一种
他俩的最大的区别是 : Topics 模式发送消息和消费消息的时候是通过通配符去进行匹配的
文章图片
通配符有如下注意点:
*/#
星号或者井号代表通配符- 星号代表多个单词,而井号代表一个单词
- 路由功能添加模糊匹配
- 消息生产者生产消息,把消息交给交换机
exchange
- 交换机 exchange 根据
key
的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费
RPC
模式RPC
远程过程调用,客户端远程调用服务端的方法 ,使用 MQ
可以实现 RPC
的异步调用文章图片
这是基于
Direct交换机
实现的,流程如下:- 客户端即是生产者也是消费者,向
RPC
请求队列发送RPC
调用消息,同时监听RPC
响应队列 - 服务端监听
RPC
请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果 - 服务端将
RPC
方法 的结果发送到RPC
响应队列。 - 客户端监听
RPC
响应队列,接收到RPC
调用结果
RabbitMQ
是一套开源(MPL)的消息队列服务软件- RabbitMQ 组件中都包含如下部分
- 生产者
- 消费者
- broker 实体
- virtual host 虚拟机
- exhcnage 交换机
- binding 绑定关系
- queue 队列
- connection 连接
- channel 信道
- message 消息
- 选择
RabbitMQ
的原因有哪些 RabbitMQ
的六种工作模式:
- simple 简单模式
- work 工作模式
- publish/subscribe 订阅发布模式
- routing 路由模式
- RPC 模式
RabbitMQ Tutorials
欢迎点赞,关注,收藏 朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
文章图片
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
【【我们一起来学 RabbitMQ 一 】RabbitMQ 的基本介绍】我是小魔童哪吒,欢迎点赞关注收藏,下次见~
推荐阅读
- 宽容谁
- 我要做大厨
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第三节|第三节 快乐和幸福(12)
- 开学第一天(下)
- 一个人的碎碎念
- 增长黑客的海盗法则
- 画画吗()