0

В настоящее время мы используем Azure Service Bus для обработки различных сообщений из нашего приложения.Как активно обрабатывать сообщения очереди очереди обслуживания Azure

Я хочу знать, что является лучшим способом обработки этих сообщений в режиме реального времени?

Есть ли способ автоматического выполнения сценария, когда сообщение помещается в очередь?

Я просто думаю, что должен быть лучший способ, чем иметь отдельное приложение для проверки очереди каждую минуту/30 секунд/и т. Д.

Спасибо, ребята

ответ

1

Вам не нужно проверить шину, основанную на таймере постоянно.

Разделы службы поддержки и подписки поддерживают модель обмена сообщениями публикации/подписки.

Когда сообщение отправляется по теме, оно затем становится доступным для каждой подписки для обработки/обработки независимо.

Вот C# пример того, как вы можете получить сообщение от темы:

string connectionString = 
    CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); 

SubscriptionClient Client = 
    SubscriptionClient.CreateFromConnectionString 
      (connectionString, "TestTopic", "HighMessages"); 

// Configure the callback options. 
OnMessageOptions options = new OnMessageOptions(); 
options.AutoComplete = false; 
options.AutoRenewTimeout = TimeSpan.FromMinutes(1); 

Client.OnMessage((message) => 
{ 
    try 
    { 
     // Process message from subscription. 
     Console.WriteLine("\n**High Messages**"); 
     Console.WriteLine("Body: " + message.GetBody<string>()); 
     Console.WriteLine("MessageID: " + message.MessageId); 
     Console.WriteLine("Message Number: " + 
      message.Properties["MessageNumber"]); 

     // Remove message from subscription. 
     message.Complete(); 
    } 
    catch (Exception) 
    { 
     // Indicates a problem, unlock message in subscription. 
     message.Abandon(); 
    } 
}, options); 

Вот более подробную информацию о издатель абонентской модели:

https://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-topics-subscriptions/

+0

Что обрабатывает/обрабатывает сообщение? где будет выглядеть этот код, чтобы он мог обрабатывать сообщение, которое мгновенно отправляется в тему? ... В настоящее время у меня есть отдельное приложение, использующее аналогичный код, как указано выше, но он срабатывает каждую минуту, и я не уверен, где/как я мог бы сразу же запустить код при получении сообщения. Это Azure Webjob/и т. Д.? – Nefariis

+0

Этот метод обрабатывает/обрабатывает сообщение: Клиент.OnMessage ((message) => { – Aram

+0

@Nefariis Об одной минуте, которая является значением по умолчанию для свойства AutoRenewTimeout, которое вы можете изменить. AutoComplete установлен в значение false, чтобы включить ручное управление при вызове Завершить на полученном сообщении. AutoRenewTimeout установленный на 1 минуту, что заставляет клиента ждать до одной минуты, прежде чем прекратить функцию автоматического обновления, и клиент делает новый вызов для проверки сообщений. – Aram

1

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

Альтернативой использования bare-bone Azure Service Bus является использование библиотеки для абстрагирования всего этого кода для вас. В конечном итоге вы будете объявлять свои сообщения - свои события и команды - и у вас есть обработчики, которые будут запущены, когда появится сообщение. Все перекачки сообщений, создание очереди, повторные попытки, обработка ошибок и аудитов и транзакций, являющихся лишь верхушкой айсберга, поставляются с такими структурами.

Как использовать эту схему, есть Nimbus и NServiceBus и, возможно, другие. NServiceBus - это коммерческий продукт, который поставляется с extensive documentation, devops и debugging and visualization коммунальными услугами и дополнительной платной поддержкой, если вам это нужно. Вот как вы получите конечную NServiceBus и работает с Azure ServiceBus:

var endpointConfiguration = new EndpointConfiguration("Endpoint1"); 
endpointConfiguration.SendFailedMessagesTo("error"); 

var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>(); 
var connectionString = Environment.GetEnvironmentVariable("AzureServiceBus.ConnectionString"); 

transport.ConnectionString(connectionString); 
transport.UseTopology<ForwardingTopology>(); 

var endpointInstance = await Endpoint.Start(endpointConfiguration) 
     .ConfigureAwait(false); 

var message = new Message1 
{ 
    Property = "Hello from Endpoint1" 
}; 

await endpointInstance.Send(message).ConfigureAwait(false); 

и на стороне получателя, все, что вам нужно, это иметь класс обработчика:

public class MyMessageHandler : IHandleMessages<Message1> 
{ 
    public Task Handle(Message2 message, IMessageHandlerContext context) 
    { 
     //Do your task 
     Console.WriteLine(message.Property); 
     return Task.CompletedTask; 
    } 
} 

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