Python结合RabbitMQ队列开发与消息处理实战
本文详解Python环境下RabbitMQ队列的使用方法,涵盖交换机路由策略、队列创建及消息发送流程。通过对比PHP实现的AMQP连接与消费者代码,演示了如何配置Direct类型交换机、持久化队列以及启用自动ACK应答模式,帮助开发者掌握消息中间件的核心集成步骤。
Python RabbitMQ队列应用概述
本文通过具体实例解析Python中RabbitMQ队列的应用方法,旨在为读者提供可参考的开发指南。
路由策略与消费者配置
当前系统采用的Exchange路由策略为:每个依赖队列的服务独占一个独立的Queue,而Consumer端则启用ACK自动应答机制来处理队列中的消息。
新增队列服务的开发步骤
若需新增一个队列服务,请遵循以下开发流程进行操作:
队列创建与消息发送
第一步,创建队列并发送消息。
<?php
$routingkey = 'key';
//设置你的连接
$conn_args = array('host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest');
$conn = new AMQPConnection($conn_args);
if ($conn->connect()) {
echo "Established a connection to the broker \n";
} else {
echo "Cannot connect to the broker \n ";
}
//你的消息
$message = json_encode(array('Hello World3!', 'php3', 'c++3:'));
//创建channel
$channel = new AMQPChannel($conn);
//创建exchange
$ex = new AMQPExchange($channel);
$ex->setName('exchange2'); //创建名字
$ex->setType(AMQP_EX_TYPE_DIRECT);
$ex->setFlags(AMQP_DURABLE);
echo "exchange2 status:" . $ex->declareExchange();
echo "\n";
for ($i = 0; $i < 100; $i++) {
if ($routingkey == 'key2') {
$routingkey = 'key';
} else {
$routingkey = 'key2';
}
$ex->publish($message, $routingkey);
}
执行上述操作后生成了50条消息,由于尚未配置消费者,这些消息处于未消费状态。

消费者创建与消息处理
第二步,创建Consumer以消费消息。
<?php
set_time_limit(0);
$e_name = 'exchange2'; //交换机名
$q_name = 'queue2'; //队列名
$k_route = 'key2'; //路由key
//连接RabbitMQ
$conn_args = array('host' => '127.0.0.1', 'port' => '5672', 'login' => 'guest', 'password' => 'guest', 'vhost' => '/');
$conn = new AMQPConnection($conn_args);
$conn->connect();
$channel = new AMQPChannel($conn);
//创建交换机
$ex = new AMQPExchange($channel);
$ex->setName($e_name);
$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型
$ex->setFlags(AMQP_DURABLE); //持久化
echo "Exchange Status:" . $ex->declareExchange() . "\n";
//创建队列
$q = new AMQPQueue($channel);
$q->setName($q_name);
$q->setFlags(AMQP_DURABLE); //持久化
//绑定交换机与队列,并指定路由键
echo 'Queue Bind: ' . $q->bind($e_name, $k_route) . "\n"; //阻塞模式接收消息
echo "Message:\n";
$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答
$conn->disconnect();
/** * 消费回调函数 * 处理消息 */
function processMessage($envelope, $queue) {
var_dump($envelope->getRoutingKey());
$msg = $envelope->getBody();
echo $msg . "\n"; //处理消息
}
代码运行后的结果如下所示。

如需了解更多Python相关技术,建议参阅本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》。
希望本文所述内容能对您的Python程序设计工作有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













