MassTransit,Autofac和2个总线实例

时间:2014-02-11 17:15:37

标签: autofac masstransit

我遇到了发布者和消费者坐在同一个应用程序中的情况。我正在使用autofac。

根据我的理解,我需要2个带有2个端点的总线实例,一个用于发布者,一个用于订阅者。

我正在使用autofac,但我不知道如何创建2个总线实例,每个实例都有自己的订阅类(应该通过autofac解析)。在JEE / CDI中,我会使用限定符,但据我所知,autofac没有那样(并且命名服务不是自动装配的)。

基本上我有两个问题:

  • 注册2个总线实例,每个实例都有一组不同的订阅者。
  • 稍后找到合适的实例。

任何提示如何做到这一点?

2 个答案:

答案 0 :(得分:3)

它使用命名实例......

builder.Register(c => new FooImpl())
    .As<IFoo>()
    .Named("Foo1");

然后

container.ResolveNamed<IFoo>("Foo1");

如果我的Autofac语法正确无误。这至少应该让你走上正确的道路。只需请求每个IServiceBus的实例,以便从容器中解析和创建它们。

哦,你不能用LoadFrom注册消费者。您必须手动解决并注册每一个。由于调用LoadFrom将注册容器中的所有使用者。

您可以创建两个子容器,每个IServiceBus一个,但现在我们已经超出了我所知道如何使用Autofac做到最好的领域。您可以使用几乎所有其他容器来完成它,所以我假设您可以使用Autofac。

答案 1 :(得分:2)

如果你看看RapidTransit项目,它有一些库,可以使用MassTransit和Autofac来构建服务。您还可以从NuGet安装Windows服务或Web应用程序包。

https://github.com/MassTransit/RapidTransit

您还可以查看使用RapidTransit的Riktig。

https://github.com/phatboyg/riktig/

您可以在Autofac中使用嵌套生命周期范围了解如何在同一进程中创建多个总线实例。

https://github.com/phatboyg/Riktig/blob/master/src/Riktig.CoordinationService/ImageRetrievalStateBusInstance.cs

以及如何使用Bootstrappers连接在一起:

https://github.com/phatboyg/Riktig/blob/master/src/Riktig.CoordinationService/CoordinationServiceBootstrapper.cs

关键是使用:

        builder.RegisterType<ImageRetrievalStateBusInstance>()
               .As<IServiceBusInstance>();

这是一个实例,可以在实例主机中注册多个实例,为您提供多种服务。