RabbitMQ的核心组成部分即分发模式

 核心概念:
Server:又称Broker ,接受客户端的连接,实现AMQP实体服务。 安装rabbitmq-server
Connection:连接,应用程序与Broker的网络连接 TCP/IP/ 三次握手和四次挥手
Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各Channel,每个Channel代表一个会话任务。
Message :消息:服务与应用程序之间传送的数据,由Properties和body组成,Properties可是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则就是消息体的内容。
Virtual Host 虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机理由可以有若干个Exhange和Queueu,同一个虚拟主机里面不能有相同名字的Exchange
Exchange:交换机,接受消息,根据路由键发送消息到绑定的队列。(==不具备消息存储的能力==)
Bindings:Exchange和Queue之间的虚拟连接,binding中可以保护多个routing key.
Routing key:是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息。
Queue:队列:也成为Message Queue,消息队列,保存消息并将它们转发给消费者。

RabbitMQ整体架构 

 在RabbitMQ中所有的消息投递都是由Exchange(交换机)转发,我们投递到RabbitMQ实际上也是投递到交换机中的,负责投递到队列的只能是交换机

 如上图,虽然我们没有写投递的交换机位置,但是也还是交由交换机的处理的,不存在直接投递到队列的情况,只是在没写的时候由默认的交换机处理投递的信息

 只要不指定投递的交换机那么就都会由默认交换机接收,后面的开发中需要填写,因为所有的消息都投递到默认交换机会影响其性能

web管理RabbitMQ创建队列:

 web管理RabbitMQ push信息:

 web管理RabbitMQ 拿取信息:

 Fanout模式

在 RabbitMQ 中,Fanout 模式 是一种消息传递模式,它将消息广播到所有绑定到该交换器(Exchange)的队列中。无论队列的绑定键(Binding Key)是什么,Fanout 交换器都会忽略这些键,并将消息发送到所有与之绑定的队列。

以下是 Fanout 模式的工作原理和步骤:

1. 基本概念
生产者(Producer):负责发送消息到 RabbitMQ 的交换器。
交换器(Exchange):接收生产者发送的消息,并根据规则将消息路由到一个或多个队列。
队列(Queue):存储消息的地方,消费者从这里获取消息。
消费者(Consumer):从队列中接收消息并处理。
2. Fanout 模式的特性
广播机制:Fanout 交换器会将收到的消息广播到所有绑定到它的队列中,而不会考虑绑定键(Routing Key)。
无条件分发:无论队列是如何绑定的,只要绑定了该交换器,就会接收到消息。
高效性:Fanout 模式非常适合需要将相同消息发送给多个消费者的场景。

 X:交换机

Q:队列

P:生产者

C:消费者

 如上图可以新建一个exchange模式为fanout,注意需要选择fanout,这样才能是订阅发布模式,注意订阅发布模式使用routing key是没有用的,它就是广播的方式发布消息

 如上图,可以使用Bindings模块进行绑定,使得被绑定的队列使用的都是fanout模式

 如上pushMessage之后就可以在队列之中查看是否全部被push进去了

 我们可以看到交换机发送信息果然是广播,每个绑定的队列都可以被push进去

Direct模式

在 RabbitMQ 中,Direct 模式是一种基于路由键(Routing Key)进行消息路由的消息传递模式。与 Fanout 交换器不同,Direct 交换器允许更精确地控制哪些队列将接收特定的消息。

Direct 模式的原理
生产者(Producer):发送带有特定路由键的消息到 Direct 类型的交换器。
交换器(Exchange):根据消息携带的路由键,将消息分发给绑定键(Binding Key)与之匹配的队列。
队列(Queue):存储从交换器接收到的消息,等待消费者处理。
消费者(Consumer):从队列中读取消息并处理。

 X:交换机

P:生产者

a,b,c:路由key

C:消费者

Q:队列

 如上图,就是创建direct模式的方式,注意绑定队列的时候就需要指定路由key了,这也是必须的,这是这个模式的风格,不然转发不了

 如上,就是图形化指定路由key的方式,并且一个队列可以指定多个路由key

 我们可以发现,direct模式的信息发送是基于routing key转发的,冷知识,默认交换机也是direct模式

如果不指定路由key,信息会从交换机发送出去,但是不会入队

Topics模式

在 RabbitMQ 中,Topics 模式是一种基于模式匹配的路由机制,它允许更加灵活的消息路由。与 Direct 模式相比,Topics 模式不仅支持精确匹配,还支持使用通配符进行部分匹配,使得消息可以根据更复杂的规则被路由到一个或多个队列中。

Topics 模式的原理

  • 生产者(Producer):发送带有特定路由键(Routing Key)的消息到 Topic 类型的交换器。

  • 交换器(Exchange):根据消息携带的路由键和队列绑定时指定的绑定键(Binding Key)之间的匹配关系来分发消息。这里的匹配是基于简单的通配符规则进行的。

  • 队列(Queue):存储从交换器接收到的消息,等待消费者处理。

  • 消费者(Consumer):从队列中读取消息并处理。

通配符规则

在 Topics 模式中,绑定键可以包含两种特殊的字符用于模式匹配:

  • *(星号):可以替代一个单词。

  • #(井号):可以替代零个或多个单词。

 X:交换机

*.a.*:左右必须都有一级目录

*.*.n:左边必须匹配两级目录

c.#:右边可以不匹配,可以匹配多级

 如上就是创建topics模式的交换机方式

 topics的模式的路由key就是模式匹配符号

 如上匹配的是队列1,其它的就匹配不上

 如上匹配的就是队列1和队列3

 Headers模式

在 RabbitMQ 中,Headers 模式 是一种基于消息头部(headers)进行路由的消息传递模式。它与常用的 Direct、Topic 和 Fanout 模式不同,Headers 模式不依赖于消息的路由键(routing key),而是通过消息头部的键值对来进行匹配。

Headers 模式的特性
基于消息头部匹配:
在 Headers 模式中,生产者发送的消息可以包含一组头部键值对。
消费者通过绑定队列时指定的头部键值对来匹配消息。
支持多条件匹配:
可以使用 all 或 any 两种匹配策略:
all:所有指定的头部键值对都必须匹配。
any:只要有一个头部键值对匹配即可。
灵活性高:
因为不需要路由键,Headers 模式非常适合那些需要根据复杂条件进行消息分发的场景。
性能较低:
相比其他模式(如 Direct 或 Topic),Headers 模式的匹配方式较为复杂,性能相对较低,因此在实际应用中较少使用。

 如上图就是创建一个headers模式的交换机,其实每次使用图形化管理就只需要命名交换机,选择模式,以及是否持久化就可以创建完成,后面使用代码完成时会发现过程是差不多的

 

 如上是headers模式手动创建匹配规则的方式

 如上图,可以使用多个headers规则来匹配,然后同时转发多个队列

----END---

 

posted @ 2025-03-26 23:02  回忆也交给时间  阅读(56)  评论(0)    收藏  举报