请自行先安装rabbitmq, 然后安装php扩展

1. 查看基本信息

【PHP版】Windows安装AMQP扩展_mysql

2.下载amqp扩展

 https://pecl.php.net/package/amqp/1.10.2/windows

【PHP版】Windows安装AMQP扩展_mysql_02

 (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');