SpringBoot整合RabbitMQ四种交换机类型详解
环境:Spring Boot2.3.10 + RabbitMQ 3.8.12 + Erlang 23.2.5
1.1 RabbitMQ介绍
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的。所有主要的编程语言均有与代理接口通讯的客户端库。
1.2 RabbitMQ核心概念
Server:又称Broker, 接受客户端的连接,实现AMQP实体服务,这里指RabbitMQ 服务器
Connection:连接,应用程序与Broker的网络连接。
Channel:通信通道,几乎所有的操作都在 Channel 中进行,Channel是进行消息读写的通道。客户端可建立多个Channel:,每个Channel代表一个会话任务。(一个Socket连接可以创建多个Channel)
Virtual Host:虚拟主机,用于逻辑隔离,是最上层的消息路由。一个 Virtual Host 里面可以有若干个 Exchange(交换机)和 Queue(队列)。
Binding:Exchange 和 Queue 之间的虚拟绑定关系。
Routing key:一 个路由规则,虚拟机可用它来确定如何路由一个特定消息,即交换机绑定到 Queue 的键。支持模式匹配,* 和#,*用来匹配一个单词,#用来匹配多个单词(可以是0个)这里的通配符只有在exchange的类型为topic才有效。
Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者。(接收端通过监听Queue来接受消息)。
Message:消息,服务器和应用程序之间传送的数据,由 Properties 和 Body 组成。Properties 可以对消息进行修饰,比如消息的优先级、延迟,过期时间,消息大小等高级特性;,Body 则就 是消息体内容。
Exchange类型:如下四种类型:fanout,headers,direct,topic。
图片
1.3 Exchange交换机类型
- fanout
发布/订阅,消费发送到该种类型的交换机后会将消息发送到所有与之绑定的Queue中,不管你有没有设置routing key。
- headers
该类型用得极少,主要就是根据设置的header来进行匹配。如下红框中你所设置的arguments:
图片
- direct
在exchange与queue进行绑定时需要设置routing key,只有发送消息的端设置的routing key与这里绑定的routingkey完全相同才会将消息发到队列中。
- topic