Masstranist - 从中​​间件访问属性

时间:2017-03-24 16:53:45

标签: masstransit

我在多租户应用程序中使用Masstransit。在Web Api部分,我使用Owin中间件来解析来自DNS的租户ID。我可以使用OWIN环境从服务中访问它。 我创建了一个Masstransit中间件来拦截消息并获取租户ID。在某些情况下,我需要访问它。 由于总线是单一范围的,我该如何访问它? 我尝试使用IConsumeObserver.PreConsume,在调试中我看到来自消费者的私有属性,但我无法访问它们。

更新: 每条消息都有TenantId属性。我们使用Entity Framework全局过滤器来过滤TenantId的所有查询。它是在我们注入消费者的工作单位上设定的:

public class MyConsumer : IConsumer<IMyCommand>
{
    private readonly ITenantConfiguration _tenantConfiguration;
    private readonly IUnitOfWork _uow;

    public MyConsumer(ITenantConfiguration tenantConfiguration, IUnitOfWork uow)
    {
        _tenantConfiguration = tenantConfiguration;
        _uow = uow;
    }

    public Task Consume(ConsumeContext<IMyCommand> context)
    {


        return Task.FromResult(true);
    }
}

问题是在从邮件中获取TenantId之前,工作单元已实例化。我使用Ninject,如果我将工作单元设置为.InTransientScope(),它可以解决我的问题。 如果我使用Web Api,我会从Owin Middleware启动类获得tenantId:

var domain = context.Request.Host.Value.ToLower();
context.Set<object>("tenantId", tenantId);

稍后,我可以从服务中访问它:

var owinContext = HttpContext.Current.Request.GetOwinContext();
var owinEnvVars = owinContext.Environment;
var currentTenantInfo = owinEnvVars["tenantId"]

当Masstransit消息时,是否有可能有类似的东西?

0 个答案:

没有答案