RabbitMQ 交换机与队列的介绍

1.流程

首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图



黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。

2. 交换机类型(面试题)

常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的,所以对应的消息推送/接收模式也会有以下几种:

1、Fanout Exchange

扇型(广播)交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。

2、Direct Exchange

直连型交换机,根据RoutingKey(路由键)路由到不同的队列

3、Topic Exchange

主题交换机,这个交换机其实跟直连交换机流程差不多,但是它的特点就是在它的路由键和绑定键之间是有规则的。(开始计算)

简单地介绍下规则:

* (星号) 用来表示一个单词 (必须出现的)

# (井号) 用来表示任意数量(零个或多个)单词

// *  代表两点之间一个占位单词  // #  代表后面所有,匹配所有

通配的绑定键是跟队列进行绑定的,举个小例子

队列Q1 绑定键为 *.TT.* 队列Q2绑定键为 TT.#

如果一条消息携带的路由键为 A.TT.B,那么队列Q1将会收到;

如果一条消息携带的路由键为TT.AA.BB,那么队列Q2将会收到;

当一个队列的绑定键为 "#"(井号) 的时候,这个队列将会无视消息的路由键,接收所有的消息。

当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的直连交换机的行为。

如果只有 # ,它就实现了扇形交换机的功能。

所以主题交换机也就实现了扇形交换机的功能,和直连交换机的功能

3.交换机与队列特性设置(了解)

Exchange、Queue属性 durability

durability默认是durable(持久化),durability 属性用于定义队列或者交换机是否是持久化的。

当一个队列或者交换机被声明为持久化的时候,它们的元数据会被存储到磁盘上,这样即使在 RabbitMQ 服务器重启后,这些队列或者交换机的定义仍然存在。

持久化的队列和交换机可以确保消息的持久化,即使 RabbitMQ 服务器重启或者崩溃,消息也不会丢失。当消息被发送到持久化的队列或者交换机时,它们会被写入磁盘,以确保消息的持久性。

需要注意的是,仅仅将队列或者交换机声明为持久化是不够的,消息本身也必须被标记为持久化,才能确保消息的持久性。这可以通过在消息的属性中设置 delivery_mode 为 2 来实现。

总之, durability 属性在 RabbitMQ 中用于确保队列和交换机的持久化,以及消息的持久性,从而提高消息传递的可靠性。

Exchange、Queue类型 delete

在 RabbitMQ 中, auto delete 属性用于定义队列或交换机是否在没有消费者或绑定时自动删除。

当一个队列或交换机被声明为 auto delete 属性为 true 时,当没有消费者与该队列关联或者没有绑定到该交换机的队列时,它们会自动被删除。

这个属性通常用于临时队列或者临时交换机的场景。临时队列或交换机是在没有消费者或者绑定时自动创建的,用于处理一些临时性的任务或者临时的消息传递。

需要注意的是,如果一个持久化的队列或交换机被声明为 auto delete 属性为 true,那么它们在没有消费者或绑定时也会被自动删除,但它们的定义会在 RabbitMQ 服务器重启后重新创建。

总之, auto delete 属性在 RabbitMQ 中用于定义队列或交换机是否在没有消费者或绑定时自动删除,适用于临时队列或交换机的场景。

Exchange属性Internal

Internal的意思是内部的意思,在交换机这里设置为“Yes”之后,表示当前Exchange是RabbitMQ内部使用,用户所创建的Queue不会消费该类型交换机下的消息,既然是为了RabbitMQ系统所用,作为用户,我们就没有必要创建该类型的Exchange,当然默认也是选择No.



RabbitMQ是一个流行的开源消息代理,它遵循AMQP协议。在RabbitMQ中,交换机(Exchange)和队列(Queue)是两个核心概念。交换机负责接收生产者发送的消息,并根据一定的规则将消息路由到队列队列则是用来存储消息的缓冲区,直到消费者来处理这些消息。 要创建交换机队列,你可以使用RabbitMQ的管理HTTP API,也可以通过RabbitMQ的命令行工具或通过支持RabbitMQ的客户端库(如Python的pika,JavaRabbitMQ.Client等)来实现。以下是使用命令行工具创建交换机队列的基本步骤: 1. 创建交换机: 使用`rabbitmqadmin`命令行工具,可以通过以下命令创建一个交换机: ``` rabbitmqadmin declare exchange name=<交换机名称> type=<交换机类型> ``` 其中`<交换机名称>`是你想要创建的交换机名称,`<交换机类型>`可以是direct、topic、fanout或headers等类型,决定了消息路由的方式。 2. 创建队列: 同样使用`rabbitmqadmin`命令行工具,可以创建一个队列: ``` rabbitmqadmin declare queue name=<队列名称> ``` `<队列名称>`是你想要创建的队列名称。 3. 绑定队列交换机: 创建了交换机队列之后,需要将它们绑定起来,以便消息能够从交换机路由到队列: ``` rabbitmqadmin declare binding source=<交换机名称> destination_type=queue destination=<队列名称> routing_key=<路由键> ``` 其中`<路由键>`是用来决定消息如何路由到队列的关键字,它会根据交换机类型和绑定时指定的键来决定消息是否会被路由到该队列。 注意,在使用这些命令之前,需要确保RabbitMQ服务正在运行,并且你有权限执行这些操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值