MQ中的交换机与队列

交换机与队列的介绍

1.流程

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

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

2. 交换机类型

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

1、Direct Exchange

直连型交换机,根据消息携带的路由键将消息投递给对应队列。

大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。

然后当一个消息携带着路由值为abc,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值abc去寻找绑定值的队列。

2、Fanout Exchange

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

3、Topic Exchange

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

简单地介绍下规则:

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

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

站内引用未直接提及消息队列MQ)保证消息从交换机队列的方法。不过可以从MQ的基本原理和相关特性进行推测。 MQ本身具有一定的机制来保障消息传递。消息队列是一种进程间通信或同一进程不同线程间的通信方式,提供异步通信协议,消息会保存在队列中直到被接收者取回,这为消息从交换机队列的传递提供了基础保障,使得消息不会轻易丢失,有机会被正确路由到队列 [^3]。 高级消息队列协议(AMQP)作为面向消息中间件的开放标准,基于此协议的客户端消息中间件可传递消息,不受产品、开发语言等条件限制,这有助于规范消息从交换机队列的传递过程,提高传递的准确性和可靠性 [^5]。 同时,在RabbitMQ中,死信队列机制可在一定程度上辅助消息传递。当绑定的消息队列中有消息变成死信时,消息会重新被交换机路由到指定的死信队列,可通过监听死信队列手动对消息进行补偿,这意味着即使消息在传递过程中出现问题,也有机会进行修复和重新传递 [^1]。 ```python # 以下是一个简单的伪代码示例,模拟消息从交换机队列的过程 class Exchange: def __init__(self): self.queues = [] def bind_queue(self, queue): self.queues.append(queue) def send_message(self, message): for queue in self.queues: queue.receive_message(message) class Queue: def __init__(self): self.messages = [] def receive_message(self, message): self.messages.append(message) # 创建交换机队列 exchange = Exchange() queue = Queue() # 绑定队列交换机 exchange.bind_queue(queue) # 发送消息 message = "Hello, MQ!" exchange.send_message(message) # 查看队列中的消息 print(queue.messages) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

涵冰...

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

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

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

打赏作者

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

抵扣说明:

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

余额充值