Как я могу получить одно сообщение из очереди 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 только первое.

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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]