1

Тема: Підключення до RabbitMQ таймаут у 30 сек. Як змінити?

Вітаю всіх.

Є демон на php, якому час від часу потрібно щось пуляти в чергу (RabbitMQ). Як це робити, цілком зрозуміло. Користуюсь jakubkulhan/bunny. На початку запуску демона стандартно

$connection = [
    'host'      => 'HOSTNAME',
    'vhost'     => 'VHOST',    // The default vhost is /
    'user'      => 'USERNAME', // The default user is guest
    'password'  => 'PASSWORD', // The default password is guest
];

$bunny = new Client($connection);
$bunny->connect();
$channel = $bunny->channel();
$channel->queueDeclare('queue_name'); // Queue name

Далі у якийсь потрібний момент часу $channel->publish(...)
Проблема в тому, що у такий спосіб Rabbit закриває підключення через 30 секунд через неактивність. Поки що викрутився тим, що кожного разу:

$bunny = new Client($connection);
$bunny->connect();
$bunny->channel();
$channel->queueDeclare('queue_name');
$channel->publish(...);
$bunny->disconnect();
$bunny->__destruct();

Але таке підключення/відключення при кожному запиті дуже збільшує лаг.  :(

Підкажіть, чи є якийсь інший спосіб держати підключення?

Перше що спадає на думку, періодично щось постити, але не вийде, бо демон відкриває сокет-з`єднання та чекає даних в безкінечному циклі, майже те саме що і реббиті, але для іншого протоколу:

$mqtt->setHandler($callback);
$mqtt->loop();

Тож вийти з нього неможливо  *DONT_KNOW*

Подякували: 0xDADA11C71

2

Re: Підключення до RabbitMQ таймаут у 30 сек. Як змінити?

Гляньте тут по слову timeout.

Подякували: 0xDADA11C71

3

Re: Підключення до RabbitMQ таймаут у 30 сек. Як змінити?

Всі пуші робити через окремий клас рабіту. Там робити через трай кетч, і якщо фейлиться перепідключатись і пробувати ще раз. Пробувати кілька раз і якщо на нму фейлиться писати листа адміну.

Подякували: 0xDADA11C7, leofun012

4

Re: Підключення до RabbitMQ таймаут у 30 сек. Як змінити?

Поки писав, осяяло. Раз в мене є mqtt, то там є періодичні PINGRESP сигнали, кожні 30 секунд. Тож я можу с такою ж періодичністю постити щось в тестову чергу. Це і є рішення  :)

Подякували: 0xDADA11C71