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