【问题标题】:Azure Service Bus - Use multiple senders in a web APIAzure 服务总线 - 在 Web API 中使用多个发件人
【发布时间】:2021-03-09 21:08:52
【问题描述】:

我们正在尝试实施 Azure 服务总线来管理用户“工作队列”

背景:

我们有一个 Web UI 将新项目推送到 Web API,这些项目被持久化到数据库,然后推送到服务总线队列。所有消息都有一个属性,表示谁可以处理该消息。为了让用户能够选择分配给他们的消息,我正在考虑创建一个主题,其中包含过滤该属性的订阅。

接近

要实现上述能力:

  • 我需要在同一个 Web API 中注册队列的发送者和主题的发送者。我尝试将两个发件人添加为单例,但在 DI 期间,我如何选择要使用的发件人?
services.TryAddSingleton(implementationFactory =>
{
    var serviceBusConfiguration = implementationFactory.GetRequiredService<IMessagingServiceConfiguration>();
    var serviceBusClient = new ServiceBusClient(serviceBusConfiguration.IntakeQueueSendConnectionString);
    var serviceBusSender = serviceBusClient.CreateSender(serviceBusConfiguration.IntakeQueueName);
    return serviceBusSender;
});


services.TryAddSingleton(implementationFactory =>
{
    var serviceBusConfiguration = implementationFactory.GetRequiredService<IMessagingServiceConfiguration>();
    var serviceBusClient = new ServiceBusClient(serviceBusConfiguration.TopicConnectionString);
    var topicSender = serviceBusClient.CreateSender(serviceBusConfiguration.TopicName);
    return topicSender;
});

我正在使用上述设置将服务添加为单例,并且我可以单独发送和接收来自主题或队列的消息。

当我在构造函数中使用 DI 来使用它时,如何注册这两个实现并选择应该注入哪个实现。

【问题讨论】:

    标签: .net-core azureservicebus azure-servicebus-queues azure-servicebus-topics


    【解决方案1】:

    关于解析同一类型的多个实例的 DI 注册,this question 的第一个答案说明了使用 ASP.NET Core 的服务解析器。据我所知,这仍然是最好的方法。

    对于发件人,您可以通过检查他们的EntityPath 属性来区分他们是指向您的队列还是主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2015-11-03
      相关资源
      最近更新 更多