#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);
}