2016-08-14 4 views
1

У меня довольно простая очередь, которая, случается, имеет кучу сообщений на ней (по дизайну). Кучи == .. говорят ... тысячи.Как обрабатывать множество сообщений в Azure Queue с помощью WebJob?

Сейчас я играю с использованием Azure Web Jobs с триггером очереди для обработки сообщений. Работает отлично.

Я беспокоюсь о качестве работы. Давайте предположим, что мой метод, обрабатывающий сообщение, занимает 1 сек. С таким количеством сообщений это все складывается.

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

Я Принимаю решение в масштабе ?? что означает, что я бы создал 25 экземпляров webjob? Или есть лучший способ, с помощью которого я могу запускать сообщение, но поп-25 или около того сразу, а затем параллельно их.

ПРИМЕЧАНИЕ. Большая часть задержек - это ввод-вывод (т. Е. Вызов REST третьему лицу). не CPU.

Я думаю -> создайте 25 заданий и await Task.WhenAll(tasks); для обработки всех данных, которые я возвращаю.

Итак - какие у меня варианты, пожалуйста?

ПРИМЕЧАНИЕ № 2: Если решение масштабируется, тогда мне также необходимо убедиться, что в моем проекте веб-работы есть только один функция в нем, правильно? в противном случае все функции (чтение: триггеры и т. д.) также будут все быть расшифровано.

+0

Если вы изучаете, я думаю, что это хороший кандидат на лазурные функции, вы, вероятно, можете разделить ваш код и заставить триггеры произойти логически. В противном случае, azure-webjobs должны работать нормально. – lopezbertoni

+0

Я просто нахожу ИНСТРУМЕНТ для функций .. очень ограничиваю. В основном я не хочу делать _any_ кодирование в веб-интерфейсе (извините Монако), потому что я хочу, чтобы код связывался с CI/CD. Это мое текущее разочарование:/ –

+0

Я чувствую, что технология выглядит многообещающе, но развивающийся опыт по-прежнему несколько боль. Если это помогает, мы обработали более 900 000 сообщений для процесса миграции с помощью webjobs. Это получилось довольно неплохо (10 экземпляров) – lopezbertoni

ответ

3

Azure WebJobs имеет конфигурацию по умолчанию для обработки 16 сообщений параллельно, и это число равно configurable. Рамка WebJobs внутренне создает 16 (или сконфигурированных MaxDequeueCount) копий вашей функции и запускает их параллельно.

Кроме того, вы можете launch multiple instances,, т. Е. Масштабировать приложение Azure App Service/Веб-сайт, на котором размещается WebJob, с учетом максимум 20 экземпляров. Тем не менее, масштабирование экземпляров (в отличие от параллельного Dequeue выше) имеет влияние цены, поэтому, пожалуйста, проверьте это.

Таким образом, теоретически вы можете обрабатывать 24 * 20 = 480 сообщений параллельно по конфигурации только по стандартной функции WebJob без какого-либо специального кода.