操作场景
本文以调用 PHP SDK 为例介绍通过开源 SDK 实现消息收发的操作过程,帮助您更好地理解消息收发的完整过程。
前提条件
操作步骤
步骤1:安装 php-amqplib 库
根据 RabbitMQ 官网推荐使用 php-amqplib Client,首先需要在项目中引入 php-amqplib 库。
1. 在项目中添加
composer.json
文件。{"require": {"php-amqplib/php-amqplib": ">=3.0"}}
2. 使用 Composer 进行安装。
composer.phar install
或者使用下述命令:
composer install
3. 创建客户端需要引入库文件,在客户端文件中引入库文件。
require_once('../vendor/autoload.php');
完成上述步骤即可创建连接与服务端进行交互。
步骤2:发送消息
创建并编译生产消息程序(以 direct 类型交换机为例)。
require_once('../vendor/autoload.php');use PhpAmqpLib\\Connection\\AMQPStreamConnection;use PhpAmqpLib\\Message\\AMQPMessage;$exchange_name = 'exchange_name';$exchange_type = 'direct';// 创建连接$connection = new AMQPStreamConnection($host,$port,$username,$password,$vhost,false,'PLAIN');// 建立通道$channel = $connection->channel();// 声明交换机$channel->exchange_declare($exchange_name, $exchange_type, false, true, false);// 设定消息路由key$routing_keys = array('info', 'waring', 'error');for ($x = 0; $x < count($routing_keys); $x++) {// 消息内容$msg = new AMQPMessage('This is a direct[' . $routing_keys[$x] . '] message!');// 发送消息到指定的交换机并设置routing key$channel->basic_publish($msg, $exchange_name, $routing_keys[$x]);echo " [Producer(Routing)] Sent '" . $msg->body . "'\\n";}// 资源释放$channel->close();$connection->close();
参数 | 说明 |
$exchange_name | Exchange 名称,在控制台 Exchange 列表获取。 |
$exchange_type | 类型需与上述 Exchange 的类型保持一致。 |
$host | 集群接入地址,在集群基本信息页面的客户端接入模块获取。 |
$port | 集群接入地址中的端口号。 |
$username | 用户名称,填写在控制台创建的用户名称。 |
$password | 用户密码,填写在控制台创建用户时填写的密码。 |
$vhost | Vhost 名称,在控制台 Vhost 列表获取。 |
$routing_keys[$x] | 消费者消息队列绑定的 routing key,消息的路由规则,在控制台绑定关系列表的绑定 Key列获取。 |
步骤3:消费消息
创建并编译消费消息程序。
<?phprequire_once('../vendor/autoload.php');require_once('../Constant.php');use PhpAmqpLib\\Connection\\AMQPStreamConnection;$exchange_name = 'exchange_name';$exchange_type = 'direct';$queue_name = 'route_queue1';// 创建链接$connection = new AMQPStreamConnection($host,$port,$username,$password,$vhost,false,'PLAIN');// 建立通道$channel = $connection->channel();// 声明交换机$channel->exchange_declare($exchange_name, $exchange_type, false, true, false);// 声明消息队列$channel->queue_declare($queue_name, false, true, false, false);// 设定队列路由key$routing_keys = array('info', 'waring', 'error');for ($x = 0; $x < count($routing_keys); $x++) {// 绑定消息队列到指定交换机并设置routingKey$channel->queue_bind($queue_name, $exchange_name, $routing_keys[$x]);}echo " [Consumer1(Routing: info/waring/error)] Waiting for messages. To exit press CTRL+C\\n";// 消息回调(消息消费逻辑)$callback = function ($msg) {echo ' [Consumer1(Routing: info/waring/error)] Received ', $msg->body, "\\n";};// 创建消费者监听指定消息队列$channel->basic_consume($queue_name, '', false, true, false, false, $callback);while ($channel->is_open()) {$channel->wait();}// 关闭资源$channel->close();$connection->close();
参数 | 说明 |
$exchange_name | Exchange 名称,可在控制台 Exchange 列表获取。 |
$exchange_type | 类型需与上述exchange的类型保持一致。 |
$queue_name | Queue名称,可在控制台 Queue 列表获取。 |
$host | 集群接入地址,在集群基本信息页面的客户端接入模块获取。 |
$port | 集群接入地址中的端口号。 |
$username | 用户名称,填写在控制台创建的用户名称。 |
$password | 用户密码,填写在控制台创建用户时填写的密码。 |
$vhost | Vhost 名称,在控制台 Vhost 列表获取。 |
$routing_keys[$x] | 消息队列支持的routing key。消费者消息队列绑定的 routing key,消息的路由规则,在控制台绑定关系列表的绑定 Key列获取。 |
步骤4:查看消息
说明