我遇到了发布者和消费者坐在同一个应用程序中的情况。我正在使用autofac。
根据我的理解,我需要2个带有2个端点的总线实例,一个用于发布者,一个用于订阅者。
我正在使用autofac,但我不知道如何创建2个总线实例,每个实例都有自己的订阅类(应该通过autofac解析)。在JEE / CDI中,我会使用限定符,但据我所知,autofac没有那样(并且命名服务不是自动装配的)。
基本上我有两个问题:
任何提示如何做到这一点?
答案 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中使用嵌套生命周期范围了解如何在同一进程中创建多个总线实例。
以及如何使用Bootstrappers连接在一起:
关键是使用:
builder.RegisterType<ImageRetrievalStateBusInstance>()
.As<IServiceBusInstance>();
这是一个实例,可以在实例主机中注册多个实例,为您提供多种服务。