请自行先安装rabbitmq, 然后安装php扩展
1. 查看基本信息
2.下载amqp扩展
https://pecl.php.net/package/amqp/1.10.2/windows
(1)将rabbitmq.4.dll 放到E:\phpstudy\Extensions\php\php7.4.3nts下
(2)将php_amqp.dll放到E:\phpstudy\Extensions\php\php7.4.3nts\ext
3.修改配置文件
php.ini 添加
extension=amqp
http.conf 添加
LoadFile "E:/phpstudy/Extensions/php/php7.4.3nts/rabbitmq.4.dll"
4.重启apache服务器
5.编写代码测试
composer.json
{ "require": { "php-amqplib/php-amqplib": "^3.0", "ext-json": "*", "ext-amqp": "*" } }
Publisher.php
<?php $config = [ 'host' => '127.0.0.1', 'vhost' => '/', 'port' => 5672, 'login' => 'guest', 'password' => 'guest' ]; // 连接broker $cnn = new AMQPConnection($config); if (!$cnn->connect()) { echo '连接失败'; exit; } // 创建通道 $ch = new AMQPChannel($cnn); // 开启通道确认模式 $ch->confirmSelect(); // 创建交换机 $ex = new AMQPExchange($ch); // 设置交换机名称 $exchangeName = 'exchange_1'; $ex->setName($exchangeName); // 设置交换机类型 $ex->setType(AMQP_EX_TYPE_DIRECT); // 设置持久化 $ex->setFlags(AMQP_DURABLE); // 声明交换机 $ex->declareExchange(); $routingKey = 'key_1'; // //$q = new AMQPQueue($ch); 设置队列名称 //$q->setName('queue_1'); 设置队列持久化 //$q->setFlags(AMQP_DURABLE); 声明队列 //$q->declareQueue(); for($i = 1; $i <= 10; $i++) { $msg = [ 'data' => '消息_'.$i ]; $ex->publish(json_encode($msg), $routingKey)."\n"; }
Consumer.php
<?php $config = [ 'host' => '127.0.0.1', 'vhost' => '/', 'port' => 5672, 'login' => 'guest', 'password' => 'guest' ]; // 连接broker $cnn = new AMQPConnection($config); if (!$cnn->connect()) { echo '连接失败'; exit; } // 创建通道 $ch = new AMQPChannel($cnn); // 创建交换机 $ex = new AMQPExchange($ch); // 声明交换机 $exchangeName = 'exchange_1'; // 设置交换机名称 $ex->setName($exchangeName); // 设置交换机类型 $ex->setType(AMQP_EX_TYPE_DIRECT); // 设置持久化 $ex->setFlags(AMQP_DURABLE); // 声明交换机 $ex->declareExchange(); // 创建队列 $q = new AMQPQueue($ch); // 设置队列名称 $q->setName('queue_1'); // 设置队列持久 $q->setFlags(AMQP_DURABLE); // 声明队列 $q->declareQueue(); // 申明路由键 $routingKey = 'key_1'; // 绑定路由键 $q->bind($ex->getName(), $routingKey); // 接收消息并处理回调方法 function receive($envelope, $queue) { echo $envelope->getBody()."\n"; } // 监听队列 $q->consume('receive');