我们一直在使用Rebus向Azure服务总线发送命令。我们有一个跨环境的项目,需要向两个不同的ASB名称空间(不同的连接字符串)发送命令。
我们目前注册Rebus的方式不允许我们创建工厂或使用多个名称空间(据我所知)。
Inside 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。不知道从哪里开始。
发布于 2018-03-12 18:21:52
虽然Rebus很好地支持通过“容器适配器”概念将自己插入到IoC容器中,但总是自动这样做并不一定有意义。
在这种情况下,我建议您将单向客户端包装成一个专用类,例如CommandSender之类的类,然后命令发送方可以在构造函数中初始化其单向客户端(并在其Dispose方法中再次将其释放)。
单向客户端的创建成本相当低,因此,只要每次需要创建/处理客户端,就可以简单地创建/处理它们。但是,如果您经常需要它们,我建议您使用ConcurrentDictionary来存储初始化的实例--只需记住在应用程序关闭时将它们全部释放。
https://stackoverflow.com/questions/49241244
复制相似问题