Long Polling

Технология Long Polling позволяет оптимизировать использование Yandex Message Queue за счет снижения количества отправляемых запросов ReceiveMessage к пустым очередям. Вместо повторения запросов Yandex Message Queue позволяет получателям ожидать поступления сообщений в очередь и сразу читать их. Кроме того, за счет увеличенного времени опроса Long Polling позволяет избежать ложных пустых ответов.

Использование

Использовать Long Polling можно задав ненулевое значение параметру WaitTimeSeconds метода ReceiveMessage. Этот параметр определяет, в течение какого времени клиент будет ожидать поступления сообщений в пустую очередь. Только по истечении этого времени клиенту будет возвращен пустой ответ. Максимальное значение WaitTimeSeconds — 20 секунд.

В ответ на ReceiveMessage возвращается как минимум одно из доступных в очереди сообщений. Максимальное количество получаемых сообщений ограничивается параметром MaxNumberOfMessages.

Преимущества перед Short Polling

Стандартное поведение метода ReceiveMessage подразумевает использование технологии Short Polling: метод не ожидает поступления сообщений в очередь, а вызовом опрашивается только часть шардов очереди. При этом в выбранных шардах может не оказаться новых сообщений, в то время как в шардах, не попавших в выборку, новые сообщения останутся непрочитанными. Это приводит к ложным пустым ответам — ReceiveMessage сообщает об отсутствии сообщений, в то время как сообщения есть в очереди.

Использование Long Polling исключает ложные пустые ответы путем опроса всех шардов очереди за установленное время ожидания, а не только попавших в выборку при выполнении запроса с нулевым параметром WaitTimeSeconds.