Как закрыть соединения RabbitMQ из обратного вызова потребителя с помощью php-amqplibPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как закрыть соединения RabbitMQ из обратного вызова потребителя с помощью php-amqplib

Сообщение Anonymous »

Мне удалось настроить сценарий, который подключается к RabbitMQ, используя библиотеку php-amqplib. Однако я хочу иметь возможность выйти из сценария в случае необходимости.
Мы подумали, что создание файла stop.txt решит проблему. По сути, после получения сообщения, если сценарий видит этот файл, он должен остановить получение любых дальнейших сообщений, удалить файл и выйти из сценария.
Однако, хотя он удаляет файл, он не предотвращает получение дальнейших сообщений и не завершает сценарий.
Как вы можете видеть, я использую точно такую ​​же функцию для выхода из сценария, что и в этом официальном примере. использует: https://github.com/php-amqplib/php-amqp ... nsumer.php. См. строку 54.
Я что-то делаю не так или чего-то не понимаю? Я новичок в этой библиотеке.
Вот сценарий, над которым я работаю. Для краткости я пропустил некоторые детали.

Код: Выделить всё

function process_message($message)
{
// ... do some processing ... //
// ... insert data into DB ... //

// send an acknowledgement back to the producer: message successfully received
$message->ack();

// if a stop file exists then exit the script
if (file_exists("./stop.txt")) {
$message->getChannel()->basic_cancel($message->getConsumerTag());
unlink("./stop.txt"); // delete stop file
}
}

function shutdown($channel, $connection)
{
$channel->close();
$connection->close();
}

$connection = new AMQPStreamConnection(HOST, PORT, USERNAME, PASSWORD, VHOST);
$channel = $connection->channel();

$channel->queue_declare(QUEUE, false, true, false, false);

// make sure only one message is sent at a time
$channel->basic_qos(null, 1, null);

// consume messages from the queue
$channel->basic_consume(QUEUE, 'consumer', false, false, false, false, 'process_message');

register_shutdown_function('shutdown', $channel, $connection);

// Loop as long as the channel has callbacks registered
while ($channel->is_consuming()) {
$channel->wait();
}
Заранее спасибо,
Ричард

Подробнее здесь: https://stackoverflow.com/questions/676 ... hp-amqplib
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»