2015-02-13 13 views
2

У меня есть служба Windows, которая слушает Azure Service Bus Queue Messages, чтобы распространять обработку из моего приложения WebApi. Мне также необходимо обрабатывать повторяющиеся задачи (ночные/еженедельные), которые, как мне казалось, лучше всего обрабатывать с использованием одной и той же системы.Сообщения очереди очереди служебной шины

Например, предположим, что у меня есть очередь для «CleanupDb» удалить несвежий DB узлы каждый день в полночь:

var client = QueueClient.Create("CleanupDb"); 
var options = /* ... */ 

client.OnMessage((message) => { 
    client.Send(new BrokeredMessage() { 
     ScheduledEnqueueTimeUtc = DateTime.Today.AddDays(1) 
    }); 

    // do DB Cleanup 
}, options) 

В теории это должно работать, но я чувствую, что не хватает более очевидный способ обрабатывая это. Есть ли способ лучше?

+0

Все в порядке. Другой вариант, вы можете создать Azure WebJob, но он даст тот же результат. –

ответ

1

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

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

Тиаго упомянул о запуске Azure WebJob в качестве опции в комментарии выше, и я согласен с этим. Он может быть запланирован и не использовать какие-либо другие ресурсы, пока он не понадобится. Другой вариант, особенно если вы еще не располагаете веб-сайтом Azure, смотрит на Azure Automation, который для ежедневного графика работы должен работать нормально (просто поймите, что длительные запущенные задачи могут быть приостановлены и, следовательно, могут работать лучше как Azure WebJob) ,

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