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
.