Очередь Azure ведет себя неожиданно

У меня есть приложение на основе PHP, которое использует очереди Azure. У моего приложения есть один cron, который запускается на моем веб-сервере каждые 20 минут, и он добавляет до 2000 сообщений в хранилище очередей Azure. Раньше эти сообщения помещались в одну очередь, но теперь я использую две разные очереди, альтернативно помещая сообщения в каждую. Кроме того, после добавления каждого сообщения в очередь период ожидания составляет одну десятую секунды, чтобы избежать удушения.

У меня около 40 виртуальных машин в Azure, которые читают из этой очереди, обрабатывают каждое сообщение, а затем обновляют базу данных, если какое-либо из этих сообщений вызывает определенное событие. Это происходит один раз в 100 сообщений.

Эти виртуальные машины имеют один скрипт PHP с максимальным временем выполнения 900 секунд (set_time_limit (900)), и они выполняются как задания cron каждые 15 минут (900 секунд).

Проблема в том, что каждые полчаса (иногда каждый час) виртуальные машины не смогут ничего читать из очереди в течение нескольких минут. Сообщение будет пустым.

Это код, который я использую

$listMessagesResult = $queueRestProxy->listMessages($queue_name);
$messages = $listMessagesResult->getQueueMessages();

Результатом является просто пустое сообщение. У меня есть следующий код для отслеживания ошибок

if (empty($messages)) {
error_log(print_r($messages, TRUE));
}

Это печатает и пустой массив. Именно это в моем журнале ошибок

Array\n(\n)\n

Поскольку код работает большую часть времени, я не вижу, в чем проблема. Вот откуда я знаю, что это происходит регулярно http://i.imgur.com/RE9XtVS.png

Ось Y — количество сообщений. Ось X — это время. Количество сообщений берется каждую минуту.

Плоская кривая после каждого альтернативного запуска сценария, который добавляет сообщение, показывает проблему. Если в коде есть проблема, поведение не будет таким ошибочным. Я не могу понять, что не так или где может быть проблема. Код довольно прост и работает большую часть времени, кроме тех 5-10 минут бездействия.

Я буду признателен за любую помощь в этом. Спасибо.

1

Решение

С Gaurav-х помочь мне удалось прибить его. Я установил начальный тайм-аут видимости на 10 минут, и именно поэтому сообщения не были видны в течение нескольких минут после их добавления в очередь. Я перепутал конфигурацию «setVisibilityTimeoutInSeconds» со временем, которое требуется для повторного появления сообщения в очереди, если оно явно не удалено.

0

Другие решения

Других решений пока нет …