Когда речь идет вниз к инфраструктурному коду, я бы лучше не писал никакого кода. В конце концов, последнее, что вы хотите увидеть, - это ошибка в коде инфраструктуры, которая приводит к потере данных/сообщений.
Альтернативой использования 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, но я использовал обе рекомендуемые рамки. Вам нужно будет решить, какой из них подходит вам.
Что обрабатывает/обрабатывает сообщение? где будет выглядеть этот код, чтобы он мог обрабатывать сообщение, которое мгновенно отправляется в тему? ... В настоящее время у меня есть отдельное приложение, использующее аналогичный код, как указано выше, но он срабатывает каждую минуту, и я не уверен, где/как я мог бы сразу же запустить код при получении сообщения. Это Azure Webjob/и т. Д.? – Nefariis
Этот метод обрабатывает/обрабатывает сообщение: Клиент.OnMessage ((message) => { – Aram
@Nefariis Об одной минуте, которая является значением по умолчанию для свойства AutoRenewTimeout, которое вы можете изменить. AutoComplete установлен в значение false, чтобы включить ручное управление при вызове Завершить на полученном сообщении. AutoRenewTimeout установленный на 1 минуту, что заставляет клиента ждать до одной минуты, прежде чем прекратить функцию автоматического обновления, и клиент делает новый вызов для проверки сообщений. – Aram