не удается получить сообщение из двух разных очередей в azure bus с помощью .netcore

#c# #asp.net-core #azureservicebus

Вопрос:

Воу, ребята,

У меня странная проблема,у меня есть класс получателя в .net ,и он отлично работает с одной очередью, вот класс :

          public class ServiceBusReceiver : IHostedService
        {
            private readonly ServiceBusClient serviceBusClient;
            public IDataHandler datahandler;

            public ServiceBusReceiver(ServiceBusClient serviceBusClient, IDataHandler datahandler)
            {
                this.serviceBusClient = serviceBusClient;
                this.payinWebhookSender = payinWebhookSender;
                this.datahandler = datahandler;
            }

            public async Task StartAsync(CancellationToken cancellationToken)
            {
           
                this.createPayinProcessor = this.serviceBusClient.CreateProcessor("queue1");
                this.createPayinProcessor.ProcessMessageAsync  = this.ProcessMessageAsync;
                this.createPayinProcessor.ProcessErrorAsync  = this.ProcessErrorAsync;
                await this.createPayinProcessor.StartProcessingAsync(cancellationToken).ConfigureAwait(false);
            }

            private Task ProcessErrorAsync(ProcessErrorEventArgs arg) => Task.CompletedTask;

            private async Task ProcessMessageAsync(ProcessMessageEventArgs args)
            {
               
                var body = args.Message.Body.ToString();
                if (!string.IsNullOrEmpty(body))
                {
                    
                    try
                    {
                        var result = JsonConvert.DeserializeObject<Model1>(body);
                        datahandler.SaveWebHookEvent(result);
                    }
                    catch (Exception )
                    {

                        throw ;
                    }
                   
                }
                // complete the message. messages is deleted from the queue. 
                await args.CompleteMessageAsync(args.Message).ConfigureAwait(false);
            }

            public Task StopAsync(CancellationToken cancellationToken) => this.createPayinProcessor.CloseAsync();
        }
    }
 

он отлично работает,но пока у меня есть одна очередь,как вы можете видеть, есть очередь с именем «queue1«, и когда я получаю сообщение, я бросил его в «model1»,проблема мне нужно иметь другую очередь позволяет назвать его «queue2» и бросил его на другую модель,назовите его «звонит model2»,как я могу это сделать?как мне узнать, из какой очереди пришло сообщение?

Комментарии:

1. Когда вы получаете сообщение, какого типа Body это объект ? Вы можете удалить строку, в которой выполняется преобразование в строку, и оператор if. Если вам нужно проверить, вы можете использовать нулевую проверку, а затем вы можете просто позвонить dataHandler.SaveWebHookEvent(args.Message.Body); без Deserlize участия.

Ответ №1:

Это возможно, и об этом больше нет документации. Вы можете создать отдельную функцию для каждой очереди , вы хотите, чтобы работник просматривал несколько очередей. Поэтому, если у вас было две очереди, приведенный ниже код поможет вам добавить работника для 2 очередей (вы можете обрабатывать каждое сообщение по-разному).

  public static void GotMessage1([ServiceBusTrigger("%qPirate1%")] BrokeredMessage message)
{
    var handler = new MessageHandler();

    var manager = new MessageManager(
        handler,
        "Pirates"
        );

    manager.ProcessMessageViaHandler(message);
}

  public static void GotMessage2([ServiceBusTrigger("%qShip1%")] BrokeredMessage message)
{
    var handler = new MessageHandler();

    var manager = new MessageManager(
        handler,
        "Ships"
        );

    manager.ProcessMessageViaHandler(message);
}