WebJob QueueTrigger — ограничение на функцию

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

public static void ProcessMessage([QueueTrigger("XXXXXXX")] string message, TextWriter log)
{
    //processing message
} 

public static void ProcessMessage([QueueTrigger("YYYYYY")] string message, TextWriter log)
{
    //processing message
} 

Должен ли я отделять каждый триггер для отдельной работы? Есть ли какие-либо причины, по которым продолжение этого пути является плохой идеей, то есть чем больше очередей он может вызвать, тем меньше функций будет выполняться из-за ограничений потоков?


person Flexicoder    schedule 21.11.2016    source источник
comment
Взгляните на этот ответ stackoverflow.com/questions/40273484/   -  person Thomas    schedule 21.11.2016
comment
@ Томас, спасибо, это было очень полезно и заставило меня подумать о том, чтобы разделить хотя бы некоторые из них.   -  person Flexicoder    schedule 22.11.2016


Ответы (1)


То, что вы делаете, является распространенным подходом — WebJobs SDK JobHost предназначен для обработки множества различных рабочих функций в одном приложении. Это правда, что все рабочие функции на одном хосте будут совместно использовать одно и то же пространство процессов/памяти и ограничения, но для большинства сценариев это не проблема и является рекомендуемым подходом.

В частности, для QueueTrigger каждая из ваших функций будет эффективно опрашивать новую работу, а когда работа будет доступна, каждая из них будет получать сообщения пакетами по 16 (настраивается с помощью JobHostConfiguration.Queues) и обрабатывать их параллельно.

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

person mathewc    schedule 21.11.2016
comment
Планируете ли вы поддерживать MaxDequeueCount для каждого триггера вместо всего хоста заданий? В моем случае это имеет смысл, так как несколько очередей могут иметь разное количество удалений из очереди перед отравлением в моем конвейере в зависимости от их назначения. - person GGirard; 20.07.2017