所有的消息都是通过 Exchange 交换机来投递给 Queue 队列的,如果有 RoutingKey,通过路由key来进行筛选,通过 bindings 和 Queue 进行绑定。Broker 就相当于是一个节点,例如在本机安装了一个 RabbitMQ 服务,那么本机就是一个 Broker,Virture Host 虚拟机节点就相当于目录,主要用户隔离和区分,可以在 页面中的 Virtual Hosts 中进行添加。
核心概念
Server:又称 Broker,接受客户端的连接,实现 AMQP 实体服务,安装 rabbitmq-server
Connection:连接,应用程序与Broker的网络连接 TCP/IP 三次握手和四次挥手
Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的信道,客户端可以建立对各个Channel,每个Channel代表一个会话
Message:消息,服务与应用程序之间传送的数据,由Properties和body组成,properteis可以是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则是消息体的内容
Virtual Host:虚拟地址,用户逻辑隔离,最上层的消息路由,一个虚拟机可以有若干个Ecchange和Queue,同一个虚拟主机里面不能有相同名字的Exchange
Exchange:交换机,接收消息,根据路由键发送消息到绑定到的队列(不具备消息存储能力)
Bindings:Exchange和Queue直接的虚拟连接,binding中可以保护多个routing key
Routing key:是一个路由规则,虚拟机可以用它来去定如何路由一个特定的消息
Queue:队列,也成为Message Queue,消息队列,保存消息并将它们转发给消费者
RabbitMQ 整体架构
RabbitMQ 运行流程
RabbitMQ 支持消息的模式
- 1、简单模式
- 2、工作模式 Work
分发机制
所有的消息都是通过 Exchange 发送到队列的
- 3、发布订阅模式
Fanout——发布与订阅模式,是一种广播机制,它是没有路由key的模式
首先创建一个 fanout 类型的交换机,命名为 fanout-exchange
接着声明几个队列
默认队列绑定的都是默认的交换机,手动绑定 fanout-exchange 交换机
当然也可以直接在交换机中进行绑定
可以看到 queue2 已经绑定上了
为了演示效果,这个再创建一个绑定默认交换机的队列 queue3,接着在 fanout-exchange 交换机中发布消息
可以看到只有绑定了 fanout-exchange 交换机的队列收到了消息
- 4、路由模式
有 routing-key 的匹配模式
创建 direct 类型的路由
绑定队列,指定路由 key
下面模拟发送消息
可以看到只有队列一多了一条消息
- 5、主体 Topic 模式
模糊的 routing-key 的匹配模式
创建 topic 类型的交换机
绑定队列
说明:#
表示0个或多个或多级,*
表示1个或者多个,但是只有一级
测试:发送如下消息,可以看到只有 queue1 收到了消息
发送如下消息,只有 queue1 和 queue3可以收到,queue2 前面符合,但是后面不符合,*
只能有一级
- 6、参数模式
参数匹配模式
创建一个 headers 类型的交换机
绑定 queue1,添加参数为 x=1
测试:给参数匹配是 x=1 的队列发送消息,只有 queue1 收到了消息