Как я могу получить одно сообщение из очереди rabbitMq, используя PHP?

Мне нужно поймать только одно реальное сообщение из одной очереди. Кролик пытается поймать их всех. Упрощенный код ниже:

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 ответ

Решение простое...

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" устанавливает подтверждение для сообщения, поэтому при правильных настройках сервера он может сказать вам, есть ли в очереди сообщения или нет, без получения сообщения.

Другие вопросы по тегам