RabbitMQ简单应用 - pingdongyi/blog-2 GitHub Wiki

rabbitmq作为一个消息队列代理,可以实现接收、存储和发送消息,由生产者发送消息给指定队列,队列接收并存储消息,消费者等待并从队列中取出消息

生产者

仅仅用来发送消息,即一个发送消息的程序,我们叫做"P"

队列

队列类似于邮箱,它常住rabbitmq内部,队列不受任何限制,可以任何多的数据,实质是一个缓存,多个生产者可以发送消息到队列,也可以多个消费者从一个队列接收消息

消费者

一个等待接收消息的程序

生产者send.php

<?php

require_once __DIR__ . '/../vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

//连接消息服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

//创建一个队列
$channel->queue_declare('hello', false, false, false, false);

//创建并发送消息
$msg = new AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');

echo " [x] Sent 'Hello World!'\n";

$channel->close();
$connection->close();

消费者receive.php

<?php

require_once __DIR__ . '/../vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

//连接消息服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

//创建一个队列
$channel->queue_declare('hello', false, false, false, false);

echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";

$callback = function($msg) {
      echo " [x] Received ", $msg->body, "\n";
};

//接收队列消息
$channel->basic_consume('hello', '', false, true, false, false, $callback);

//循环等待消息
while(count($channel->callbacks)) {
        $channel->wait();
}
⚠️ **GitHub.com Fallback** ⚠️