2016-11-24 5 views
1

Есть ли способ приостановить непрерывный webjob - остановить прием сообщений с сервисной шины на временной интервал? У меня есть система, которая постоянно получает данные. Затем отправленные данные отправляются на служебную шину. Мне интересно, есть ли способ прекратить обработку сообщений. Конечно, другим решением было бы не отправлять эти сообщения - держать их в очереди в системе отправителя.Azure Service Bus Continuous WebJob pause

+0

Я бы предпочел что-то вроде создания временного интервала и проверки того, соответствует ли временной интервал текущему времени и ничего не делает, если он соответствует – 4c74356b41

+0

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

+0

Является ли ваш веб-сайт использованием servicebustrigger? – Thomas

ответ

1

Вы можете остановить webjob, установив WEBJOBS_STOPPED в 1 в настройках вашего приложения. Это немного грубо, но это останавливает webjob.

0

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

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log) 

Но это не единственный способ получить сообщение в непрерывном веб-блоге. Вы можете использовать объект QueueClient получать эти сообщения так же легко:

var connectionString = "//connection string here//"; 
var queueName = "samplequeue"; 

var client = QueueClient.CreateFromConnectionString(cnStr, queueName); 

client.OnMessage(message => 
{ 
    string msg = message.GetBody<string>(); 
    // Process message here... 
}); 

Console.ReadLine(); 

(см https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues для получения дополнительной информации.)

Так что в вашем webjob, вы можете слушать два автобуса: первый операционный которую вы уже используете для обработки ваших деловых сообщений. Новая тема - контрольная шина. Это всегда прослушивание, но вы отправляете сообщение только тогда, когда хотите изменить поведение рабочей очереди.

Итак, вы отправляете «СТАРТ» на шину управления. Получение этого сообщения вызовет вышеуказанный код и вызовет запуск рабочей шины для обработки сообщений.

Если вы хотите прекратить обработку, отправьте «STOP» на шину управления. Когда это сообщение получено, вызовите client.Close(); на рабочей шине. Это приостанавливает обработку сообщений до тех пор, пока не будет получено следующее сообщение «СТАРТ».

Конечно, вы можете расширить это. Например, вы можете отправить «ПАУЗА 10 МИНУТ» на шину управления, которая может остановить рабочую шину, а затем установить таймер, чтобы перезапустить его через 10 минут. Вы ограничены только своим воображением!

Лично я скорее всего буду использовать Json-сообщения, а не простой текст, но все, что вам подходит.