请写出php示例
时间: 2023-08-16 11:03:32 浏览: 67
以下是一个使用PHP AMQP库实现多个消费者监听同一个队列的示例代码:
```php
<?php
require_once __DIR__ . '/vendor/autoload.php'; // 引入AMQP库
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// 连接RabbitMQ服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
// 定义队列名称和属性
$queue_name = 'my_queue';
$queue_attrs = array('passive' => false, 'durable' => true, 'exclusive' => false, 'auto_delete' => false);
// 声明队列
$channel->queue_declare($queue_name, $queue_attrs);
// 定义回调函数
$callback = function ($msg) {
echo "Received message: " . $msg->body . "\n";
sleep(1); // 模拟消息处理时间
};
// 同时启动三个消费者
$channel->basic_consume($queue_name, '', false, true, false, false, $callback);
$channel->basic_consume($queue_name, '', false, true, false, false, $callback);
$channel->basic_consume($queue_name, '', false, true, false, false, $callback);
// 监听队列
while (count($channel->callbacks)) {
$channel->wait();
}
// 关闭连接
$channel->close();
$connection->close();
?>
```
在上面的示例中,我们定义了一个名为`my_queue`的队列,并且启动了三个消费者同时监听该队列。当有消息发送到队列时,RabbitMQ会将其分发给其中一个正在监听该队列的消费者,每个消费者都会收到部分消息。在本例中,我们简单地在回调函数中输出了消息内容,并且在每个消息处理之间模拟了1秒的处理时间。
阅读全文