如何使用PHP从RabbitMQ队列获取单个消息?

7
我需要从一个队列中仅获取一条实际的消息。Rabbit尝试捕获所有消息。以下是简化的代码:
private function getSingleTask(){
$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');

$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);

$callback = function($msg) {
 return $msg->body;
};

$channel->basic_qos(null, 1, null);
$channel->basic_consume('helloQueue', '', false, true, false, false, $callback);
$channel->wait(null, true, 5);
}

我往队列里放了几条消息,但是一旦我执行下面的代码部分,它会从队列中获取所有消息,而$callbacks只获取第一个。

1个回答

6
解决方案很简单...
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPConnection;

$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel(); 
$result = ($channel->basic_get('helloQueue', true, null)->body);

顺便说一下,“basic_get”方法的第二个参数可以设置消息的确认状态,因此在正确的服务器设置下,它可以告诉你队列是否有消息,而无需获取消息。


现在它是AMQPStreamConnection。其他任何东西似乎都没有变化。 - Alin Pop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接