SpringBoot_消息_RabbitMQ
SpringBoot
RabbitMQ简介:
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol) 的开源实现。
核心概念:
概念: | 说明: |
---|---|
Message-消息: | 消息是不具名的,它由 消息头 和 消息体 组成; 消息体是不透明的; 消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储) 等; |
Publisher-生产者: | 一个向交换器发布消息的客户端应用程序; |
Exchange-交换器: | 用来接收生产者发送的消息并将这些消息路由给服务器中的队列; 包括direct(默认),fanout ,topic,和 headers 四种类型; direct 能实现 点对点消息通信模型,fanout、topic 和 headers 能实现 发布(publish)/订阅(subscribe)消息通信模型 ; |
Queue-消息队列: | 用来保存消息直到发送给消费者; 它即是消息的 容器,也是消息的 终点; 一个消息可 投入一个或多个队列; 消息一直在队列里面,等待消费者连接到这个队列将其取走; |
Binding-绑定 : | 用于消息队列和交换器之间的关联; 一个绑定就是 基于路由键 将 交换器 和 消息队列 连接起来的 路由规则,所以可以将交换器理解成一个由绑定构成的路由表; Exchange 和Queue的绑定可以是多对多的关系; |
Connection-网络连接: | 例如:一个TCP连接; |
Channel-信道: | 多路复用连接中的一条独立的双向数据流通道; 信道是建立在真实的TCP连接内 的 虚拟连接,AMQP 命令都是通过信道发出去的,不管是 发布消息、订阅队列 还是 接收消息,这些动作都是通过 信道完成; 因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接; |
Consumer-消息的消费者 : | 表示一个从消息队列中取得消息的客户端应用程序; |
Virtual Host-虚拟主机 : | 表示一批交换器、消息队列和相关对象; 虚拟主机是 共享 相同的 身份认证 和 加密环境 的 独立服务器域 每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制; vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / ,根据路径划分 ; |
Broker : | 消息队列服务器实体; |
图片来源于尚硅谷
RabbitMQ运行机制:
AMQP 中的消息路由:
与 JMS 存在一些差别; |
增加了 Exchange 和 Binding 的角色; |
生产者把消息发布到 Exchange 上,消息最终到达队列并被消费者接收,而 Binding 决定交换器的消息应该发送到那个队列; |
Exchange 类型:
direct: 根据路由键,将消息派发给指定的队列;
fanout: 不管路由键,将消息派发给交换器绑定的所有队列;
topic: 根据路由键的规则匹配,将消息有选择性的派发到队列;