2015-03-07 2 views
5

У меня есть два разных сценария для обработки двух разных типов очередей с использованием хранилища очереди Azure.Конфигурирование QueueTrigger для каждой очереди с использованием хранения очереди Azure

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

Я смотрел документацию, и я могу применить конфигурацию к хосту, влияющую на весь диапазон очередей.

static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 
     config.Queues.BatchSize = 8; 
     config.Queues.MaxDequeueCount = 4; 
     config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15); 
     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 
    } 

так что я могу настроить эти сценарии, используя одну учетную запись в виде лазурного хранилища?

ответ

1

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

Вы можете выполнить следующие подходы

1) Deploy 2 веб-задания, каждый ждать различных очередей и вызвать соответствующие задания, когда на соответствующей очереди появляется сообщение. Код конфигурации, который вы упомянули выше, устанавливает базу для одного задания. И AFAIK, работа может ждать в одной очереди. Вы можете иметь метод, как это рядом с Main() методом

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage) 
{ 
    //do something 
} 

2), если вы хотите, чтобы вызвать несколько сценариев, основанных на сообщениях из одной очереди, вы можете иметь, если еще блок по методу ProcessQueueMessage или если вы хотите сделайте его более управляемым, используйте шаблон стратегии, чтобы выполнить правильный метод от ProcessQueueMessage

Если вы следуете за № 1 выше, вы разворачиваете различные веб-задания для каждой задачи/задания/сценария. Если вы следуете за № 2 выше, вы будете развертывать одно веб-задание, и то, что делает каждое сообщение, определяется при обработке сообщения.

Документация по вопросу ожидания в очереди here.

[Update]

Как мы знаем, один веб-работа может ждать только одна очередь, ожидание в очереди не правильный подход в данном случае. Лучше запускайте веб-работу периодически (скажем, раз в 5 минут). Логика для удаления сообщений из нескольких очередей и их обработки будет частью одного веб-задания. Обработка каждой очереди может быть методом, который вызывается веб-сайтом (один за другим или одновременно с использованием Task). Вы можете передать количество сообщений на CloudQueue.GetMessages для каждой очереди. Он будет очень похож на то, что делает служба Windows. Просто, чтобы запускающая часть выполнялась веб-заданием, и она работает как веб-работа, а не служба Windows. Вот грубый псевдокод:

main() 
{ 
    // initialize webjob 
} 
public static MyWebJobMethod(...) 
{ 
    Task a =() => {//process queue 1}; 
    Task b =() => {//process queue 2} 
    Task.WaitAll(a,b); 
} 
+0

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

+0

http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#config –

+0

обновил мой ответ ... – Amit

Смежные вопросы