Всем привет!
я пишу рабочие на PHP (Yii2) для обработки сообщений rabbitMQ с использованием PHP-amqplib.
Пример кода:
public function start($message)
{
$this->_getChannel()->queue_declare($this->_getQueueName(), false, true, false, false);
$this->stdout(" [*] Worker ". $this->_getQueueName() ." started\n", Console::BOLD);
$this->_getChannel()->basic_qos(null, 1, null);
$this->_getChannel()->basic_consume(
$this->_getQueueName(), '', false, false, false, false, [$this, 'rabbitCallback']
);
while (count($this->_getChannel()->callbacks)) {
$this->_getChannel()->wait();
}
$this->_getChannel()->close();
}
public function rabbitCallback($message)
{
$this->callbackResponse(json_decode($message->body, true));
$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
}
я использую руководитель для демонизировать рабочих.
Все отлично работает первые 2 дня, потом вижу в RabbitMQ:
Ready 1000 msg
Unacked 1000 msg
Рабочие вообще не читают сообщения, счет увеличился.
supervisor> status
journal:journal_00 RUNNING pid 103516, uptime 3 days, 20:40:55
journal:journal_01 RUNNING pid 103517, uptime 3 days, 20:40:55
journal:journal_02 RUNNING pid 103514, uptime 3 days, 20:40:55
Супервайзер говорит, что работники работают нормально, но сообщения можно читать.
Если я перезапущу супервизор — все начнет работать нормально, сообщения начнут уменьшаться.
Логи понятны = (
У кого-нибудь из вас есть такая же проблема?
Задача ещё не решена.
Других решений пока нет …