AMQP транспортом.
Проблема следующая, у нас запущено 10 воркеров, но бывает так что в очередь задачи попадают редко, и только 2-3 воркера работают, остальные простаивают.
Хендлеры при обработке сообщений могут пустить в какую-то другую очередь сообщения.
Но из-за того, что rabbitmq соединение простаивает, сервер rabbitmq обрубает соединение по таймауту.
И получаю ошибки: "Library error: connection closed unexpectedly" при попытке задиспатчить сообщение из хендлера.
При этом в стандартном php-amqp нет возможности проверять живое ли соединение. Метод isConnected() всегда возвращает true, даже если выключить RabbitMQ сервер.
Есть одно решение, но оно мне кажется костыльным.
Можно запускать php bin/console messenger:consume с флагом —time-limit в N секунд, а при коннекте к RabbitMQ тоже выставлять у клиента таймаут в эти же N секунд, тогда, кажется, проблема обрыва соединений будет решена.
Может кто сталкивался?
Heartbeat пробовали?
нет, а как из php отправлять эти heartbeats, если он синхронный?
В документации messenger есть опция для конфига
Обсуждают сегодня