RabbitMQ任务分发

本文详细介绍了RabbitMQ中的任务分发机制,重点解析了直连交换机的工作原理,强调任务分发发生在队列与消费者之间,而非交换机类型决定。文中通过示例代码演示了如何实现消息的正确分发,以加深理解。
摘要由CSDN通过智能技术生成

RabbitMQ中文文档 http://rabbitmq.mr-ping.com/

在RabbitMQ的文档中,对于任务分发是放在“工作队列”这一章节介绍的。

在后面介绍扇形、直连、主题交换机时并没有提到,在学习的过程中容易误认为只有默认交换机才具有任务分发机制。

RabbitMQ中消息的分发有3个过程
1. 生产者将消息发送到交换机
2. 交换机将消息分发到队列
3. 队列将消息分发给消费者

在步骤1,生产者使用basic.push方法发送消息,并指定交换机的名称和路由键。RabbitMQ将消息传递给对应的交换机,路由器则会通过路由键进一步将消息传递给队列。

不同的路由器是根据步骤2的行为进行区分的。扇形交换机会忽略路由键,将消息发送给所有绑定的队列(所有与该交换机绑定的队列,会收到同样的消息,类似redis中的发布、订阅机制)。对于直连交换机和主题交换机,在队列绑定交换机时都需要指定路由键,当与步骤1中的路由键存在对应关系时,交换机就会将消息发送给队列。

对于步骤2中的绑定操作,一个交换机可以绑定多个不同的队列,一个队列也可以绑定多个不同的交换机。如果有多个不同的队列,使用相同的路由键绑定路由器,则它们都会受到路由键对应的消息。
这里写图片描述
如果所示,队列S9b和Agl都使用路由键error绑定了直连交换机X,因此生产者发送路由键为error的消息时,队列S9b和Agl都会收到,消费者C1和C2都会进行处理。

步骤3才是进行任务分发的部分,也就是说任务的分发是指的多个消费者处理同一个队列中的信息时,会进行任务的分发。
例如一共N个队列,
第一个消费者,获取的是第0,N,2N … 个消息
第二个消费者,获取的是第1,N+1,2N+1 … 个消息

第N个消费者,获取的是第N-1,2N-1,3N-1 … 个消息

rabbitmq手册中关于直连交换机的文档地址:
http://rabbitmq.mr-ping.com/tutorials_with_python/[4]Routing.html

该章节的示例程序中,通过rabbitmq声明了临时队列,因此运行多个consume脚本时,会生成多个不同的队列,并且一个队列只有一个消费者,所以并不会对队列中的任务进行分发。

下面对示例程序中的代码进行扩展,让每个队列对应两个消费者,进行任务的分发。

log_produce.php

生产者发送10条路由键为error的消息,10条路由键为info的消息,到直连路由器direct_logs。

<?php
require_once '../vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$connection = new AMQPStreamConnection('127.0.0.1', 
RabbitMQ是一个开源的消息代理系统,它能够用于构建高效、可靠的任务调度系统。以下是用RabbitMQ任务调度系统的一些主要优势。 首先,RabbitMQ基于AMQP (Advanced Message Queuing Protocol)协议,可以有效地处理大量的消息传递。通过将任务发布到RabbitMQ中的消息队列中,并使用消费者来消费这些任务,可以实现高效、并发的任务调度。 其次,RabbitMQ的消息队列具有强大的可靠性和可恢复性。当一个任务发布到队列中时,它会被安全地存储在消息队列中,即使消费者不可用也不会丢失。一旦消费者重新上线,它可以从队列中获取任务并执行。 此外,RabbitMQ还支持多种消息确认机制,包括消息的发布确认和消费确认。这些机制确保了任务的可靠传递和消费,可以提高任务调度系统的稳定性和可靠性。 另外,RabbitMQ还提供了灵活的交换器和路由器,可以根据任务的特性和需求进行灵活的路由和分发。这使得任务调度系统可以根据任务的优先级、类型或其他属性进行灵活的调度和分发。 最后,RabbitMQ提供了丰富的工具和API,方便开发人员进行集成和管理。可以使用各种编程语言和框架与RabbitMQ进行交互,并使用其提供的管理界面监控和管理消息队列的状态和性能。 综上所述,使用RabbitMQ作为任务调度系统可以提供高效、可靠的任务分发和执行机制,为复杂任务调度提供了强大的支持。无论是在云计算环境、分布式系统中还是在单机环境中,RabbitMQ都是一个可靠的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值