1 安装
推荐使用docker环境,通过 docker-compose 快速构建。
dnmp详细教程
访问方式:本机Ip:15672 如果使用docker, ip 为 局域网地址,不是127.0.0.1 。 如http://192.168.10.85:15672/
2 使用
2.1 发布消息
发布到rabbmit会有延迟
<?php
/**
* 发送消息
*/
$exchangeName = 'demo';
$routeKey = 'ready_in_use_sku';
$params = getopt("m:msg");
$message = $params['m'] ?? "hello word";
$queueName = 'ready_in_use_sku';
// 建立TCP连接
$connection = new AMQPConnection([
'host' => '192.168.10.85',
'port' => '5672',
'vhost' => '/',
'login' => 'myuser',
'password' => 'mypass'
]);
$connection->connect() or die("Cannot connect to the broker!\n");
try {
//新建通道
$channel = new AMQPChannel($connection);
//新建交换器及配置
$exchange = new AMQPExchange($channel);
$exchange->setName($exchangeName);
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->setFlags(AMQP_DURABLE);//持久化
//@todo 新建队列,通过 $routeKey 将交换器绑定到队列,从而将消息发送到队列
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->declareQueue();
//注意这里 bind 是很重要的操作!!!
$queue->bind($exchangeName, $routeKey);
echo 'Send Message: ' . $exchange->publish($message, $routeKey) . "\n";
echo "Message Is Sent: " . $message . "\n";
} catch (AMQPConnectionException $e) {
var_dump($e);
}
$connection->disconnect();// 断开连接
2.2 订阅消息
<?php
/**
* 接收消息
*/
$exchangeName = 'demo';
$routeKey = 'ready_in_use_sku';
$queueName = 'ready_in_use_sku';
// 建立TCP连接
$connection = new AMQPConnection([
'host' => '192.168.10.85',
'port' => '5672',
'vhost' => '/',
'login' => 'myuser',
'password' => 'mypass'
]);
$connection->connect() or die("Cannot connect to the broker!\n");
//新建通道
$channel = new AMQPChannel($connection);
//新建交换器及配置
$exchange = new AMQPExchange($channel);
$exchange->setName($exchangeName);
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->setFlags(AMQP_DURABLE);//持久化
//@todo 新建队列,通过 $routeKey 将交换器绑定到队列,从而消费队列
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->declareQueue();
//注意这里 bind 是很重要的操作!!!
$queue->bind($exchangeName, $routeKey);
// 消费队列消息
while(true) {
$queue->consume('processMessage');
}
function processMessage($envelope, $queue) {
$msg = $envelope->getBody();
var_dump("Received: " . $msg);
$queue->ack($envelope->getDeliveryTag()); // 手动发送ACK应答
}
// 断开连接
$connection->disconnect();
2.3 运行测试
2.4 使用客户端查看发布的消息
-
进入队列
-
查看发布的消息