简单队列就是当redis的队列用,一个存,一个去,可以不用交换机,路由键之类的,
建立连接通道,声明队列,存就可以
生产者 send.php
<?php
//引入类库
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
//$config = array(
// 'host' => '127.0.0.1',
// 'vhost' => '/',
// 'port' => 5672,
// 'login' => 'guest',
// 'password' => 'guest'
//);
try {
//创建一个连接
$connection = new AMQPStreamConnection('127.0.0.1', '5672', 'guest', 'guest', '/'); // 建立连接到RabbitMQ服务器
//建立通道
$channel = $connection->channel();
//声明需要存储消息的队列,已经存在,可以不用声明
// $channel->queue_declare('list_set_1', false, false, false, false);
//指定要发送的消息内容 hello world
$msg = new AMQPMessage('第四个');
//将消息内容发动到指定的 队列,如果这里找不到对应的队列,那么消息是无法到达消费者那里的,此时我们使用的是默认交换类型
$channel->basic_publish($msg, '', 'list_set_1');
// 关闭通道
$channel->close();
// 关闭连接
$connection->close();
echo '发送成功';
} catch (Exception $e) {
die($e->getMessage());
}
消费者 receive.php
<?php
//引入类库
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
//$config = array(
// 'host' => '127.0.0.1',
// 'vhost' => '/',
// 'port' => 5672,
// 'login' => 'guest',
// 'password' => 'guest'
//);
//创建一个连接
$connection = new AMQPStreamConnection('127.0.0.1', '5672', 'guest', 'guest', '/'); // 建立连接到RabbitMQ服务器
//建立通道
$channel = $connection->channel();
//声明需要存储消息的队列,已经存在,可以不用声明
$channel->queue_declare('list_set_1', false, false, false, false);
/**
* 只有生产才会有消费。但是有可能我们会在生产者之前去启动消费者,所以我们要确保这个消费队列存在,才会尝试从中消费消息
* 我们将告诉 rabbitmq 服务器,如果队列存在且有消息,要将队列中的消息传递给我们
* 我们将定一个 callback 回调函数,它将接受服务器发送的消息
* 请记住,消息是从服务器异步发送给客户端的
* @param $msg
*/
$callback = function ($msg) {
echo ' 队列信息: ', $msg->body, "\n";
};
//消费消息
$channel->basic_consume('list_set_1', '', false, true, false, false, $callback);
// 当 $channel 有回调时,我们的代码会被阻塞,每当我们收到一条消息,我们的 $callback 函数都会传递给我们生产者发送的消息
while ($channel->is_open()) {
$channel->wait();
}
// 关闭通道和连接
//$channel->close();
//$connection->close();