使用Rebus& amp; AzureServiceBus

时间:2018-03-12 17:31:26

标签: c# .net-core azureservicebus rebus

我们一直在使用Rebus向Azure Service Bus发送命令。我们有一个跨越环境的项目,需要将命令发送到两个不同的ASB名称空间(不同的连接字符串)。

我们目前注册Rebus的方式不允许我们创建工厂或使用多个名称空间(我知道)。

内部Startup.cs ConfigureServices(...)方法:

services.AddRebus(config =>
{
    var asbConfig = Configuration.GetSection("AzureServiceBusConfiguration").Get<AzureServiceBusConfiguration>();
    config
        .Logging(l => l.Serilog(Log.Logger))
        .Transport(t => t.UseAzureServiceBusAsOneWayClient(asbConfig.ConnectionString))
        .Routing(r => r.TypeBased().Map<MyCommand>($"{asbConfig.Environment}/myQueueName"));

    return config;
});

我试过从几个不同的方向攻击这个,但都没有做到。是否支持使用不同的连接字符串注册多个IBus配置?

我们基本上需要根据请求范围对其进行调整,以便我们可以根据请求标头值配置Rebus。不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

虽然Rebus对通过“容器适配器”概念将自身插入IoC容器提供了很好的支持,但总是让它自动完成它并不一定有意义。

在这种情况下,我建议你将单向客户端包装成一个专用类,例如像CommandSender之类的东西,然后命令发送者可以在构造函数中初始化它的单向客户端(并在其Dispose方法中再次处理它。)

单向客户端的创建成本相当低,因此只需在每次需要时创建/部署它们都可以。如果您经常需要它们,我建议您使用ConcurrentDictionary来存储已初始化的实例 - 只需记住在应用程序关闭时将它们全部丢弃。