请自行先安装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');