Могут ли веб-задания Azure опрашивать очереди по запросу?

У меня есть веб-задание, которое запускается, когда пользователь загружает файл в хранилище BLOB-объектов - он запускается сообщением хранилища очереди, которое создается после завершения загрузки.

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

Некоторые из этих заданий критичны по времени и выполняются относительно быстро. В одном случае обработка занимает около трех секунд, и пользователь ждет результата.

Однако, поскольку минимальный интервал опроса очереди составляет 2 секунды, время, в течение которого пользователь должен ждать вызова двух веб-заданий, обычно удваивает их время ожидания.

Я попытался объединить два веб-задания в одно, надеясь, что, когда первый обработчик отправит сообщение в очередь, соответствующий обработчик обработки будет немедленно запущен, но на самом деле он постоянно ждет две секунды, прежде чем забрать сообщение.

Мой вопрос: могу ли я сказать своему веб-заданию, чтобы я немедленно проверял триггеры очереди из того же веб-задания, если я знаю, что есть ожидающее сообщение? Или еще лучше настроить его для немедленной проверки триггеров очереди, если я отправляю в очередь изнутри WebJob?

Или переключение на очередь служебной шины улучшило бы реакцию на новые сообщения?

Обновить

В документации об использовании триггеров больших двоичных объектов говорится:

Есть исключение для больших двоичных объектов, которые вы создаете с помощью атрибута Blob. Когда пакет SDK WebJobs создает новый большой двоичный объект, он немедленно передает новый большой двоичный объект всем подходящим функциям BlobTrigger. Поэтому, если у вас есть цепочка входов и выходов больших двоичных объектов, SDK может эффективно их обрабатывать. Но если вам нужна низкая задержка при выполнении функций обработки больших двоичных объектов для больших двоичных объектов, которые создаются или обновляются другими способами, мы рекомендуем использовать QueueTrigger, а не BlobTrigger.

http://azure.microsoft.com/en-gb/documentation/articles/websites-dotnet-webjobs-sdk-storage-blobs-how-to/

Однако для очередей ничего подобного не упоминается. Это означает, что если в этом сценарии вам нужна действительно низкая задержка, то капли лучше, чем очереди, что кажется неправильным.

Обновление 2

В конце концов, я решил обойти это, вытащив код оркестровки из первого WebJob на сервисный уровень приложения и удалив WebJob. В любом случае он работал быстро, поэтому, возможно, разделение его на собственное WebJob было излишним. Это означает, что после загрузки файла должна запускаться только обработка веб-задания.


person James Thurley    schedule 20.02.2015    source источник


Ответы (1)


В настоящее время 2 секунды - это минимальное время, необходимое SDK для опроса нового сообщения. SDK выполняет опрос с экспоненциальной задержкой, поэтому вы можете настроить MaxPollingInterval всегда равным 2 секундам. config.Queues.MaxPollingInterval = TimeSpan.FromSeconds (15);

Для получения дополнительных сведений см. http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#config

person pranav rastogi    schedule 20.02.2015
comment
Да, я также упомянул в своем вопросе минимальный интервал опроса 2 секунды. Я надеялся на что-то более умное, например, то, что реализовано для больших двоичных объектов (подробнее см. Обновление по моему вопросу). - person James Thurley; 21.02.2015
comment
Это должно происходить и с очередями. Мы быстро отслеживаем уведомления, когда SDK отправляет сообщение. - person pranav rastogi; 26.02.2015
comment
Возможно ли, что быстрого отслеживания не произойдет, если очереди вывода расположены с использованием интерфейса IBinder? - person James Thurley; 26.02.2015