Прослушивание очереди (управляемая событиями без опроса) Service-Bus/Storage Queue

Я пытаюсь понять, как я могу прослушивать события в очереди (особенно событие постановки в очередь).

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

Я пытаюсь добиться этого без While(true) и постоянного опроса, я пытаюсь сделать это в большей степени слушателем, что-то вроде сокета, который остается подключенным к очереди.

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

Спасибо.

Я привел очень простой пример для простоты вопроса, но моя реальная ситуация немного сложнее:

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

Мне нужно как-то узнать, когда Worker обработал сообщение. Я хочу, чтобы рабочий отправил сообщение в очередь, предупреждая, что веб-API обработал сообщение, но теперь мне нужно заставить веб-API «сидеть» и дождаться ответа рабочего назад, что привело меня к моему вопросу :

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


person Ron    schedule 26.10.2015    source источник
comment
Существует служба под названием Azure Event Hubs.   -  person Léon Pelletier    schedule 26.10.2015
comment
Спасибо сейчас проверю   -  person Ron    schedule 26.10.2015


Ответы (2)


Используйте пакет SDK для веб-заданий Azure — в нем есть триггеры для мониторинга очередей и больших двоичных объектов с помощью простого кода, например:

public static void Main()
{
    JobHost host = new JobHost();
    host.RunAndBlock();
}

public static void ProcessQueueMessage([QueueTrigger("webjobsqueue")] string inputText, 
    [Blob("containername/blobname")]TextWriter writer)
{
    writer.WriteLine(inputText);
}

На странице Что такое пакет SDK Azure WebJobs есть отличное руководство. .

person viperguynaz    schedule 26.10.2015
comment
Будет периодически дергать? - person Léon Pelletier; 26.10.2015
comment
Он отслеживает журналы очереди и извлекает сообщение из очереди, как только оно добавляется. - person viperguynaz; 26.10.2015
comment
@viperguynaz Я обновил свой вопрос. Я не думаю, что Web Job поможет мне с этим. - person Ron; 26.10.2015
comment
WebJob SDK можно использовать где угодно — попробуйте его в качестве доказательства концепции. - person viperguynaz; 26.10.2015

В конце концов я использовал QueueClient.ReceiveAsync, чтобы дождаться сообщения с параметром Timespan.

            BrokeredMessage msg = subClient.ReceiveAsync(TimeSpan.FromMinutes(3));

Вот хорошая статья, объясняющая большую часть служебной шины Azure ссылка и рекомендации по служебной шине .

person Ron    schedule 04.11.2015
comment
Итак, вы перешли на очереди служебной шины вместо использования очередей службы хранилища Azure? - person Cloud SME; 08.08.2017
comment
Он недоступен в новом пакете Microsoft.Azure.ServiceBus Nuget Standard .NET для клиента Azure ServiceBus :( :( :( - person Sawan; 19.08.2017
comment
Он доступен, но изменился: stackoverflow.com/a/50456181/264031 - person Nicholas Petersen; 04.12.2019