由于某种原因,我无法在masstransit google 群组中发帖,即使我加入了,但我被告知我无权在此群组中发帖。所以我要在这里发帖...
现在解决我的问题:
我正在使用 MassTransit v2.7.2 和 AutoFac v2.6.3。我正在尝试配置 Autofac 以扫描程序集并注册我的消费者;所有实现 IConsumer 接口的类型。这似乎有效。
当我配置总线时,我正在使用 MassTransit.AutofacIntegration 程序集和LoadFrom(...)
扩展方法将容器中的消费者注册到 MassTransit。这是代码:
var builder = new ContainerBuilder();
builder
.RegisterAssemblyTypes(typeof (CreateElectionCommandHandler).Assembly)
.Where(type => type.Implements<IConsumer>())
.AsSelf();
var container = builder.Build();
var localBus = ServiceBusFactory.New(configurator =>
{
//configurator.ReceiveFrom("loopback://localhost/testqueue");
configurator.ReceiveFrom("rabbitmq://localhost/commandqueue");
configurator.UseRabbitMq();
configurator.Subscribe(sbc => sbc.LoadFrom(container));
});
Assert.IsTrue(container.IsRegistered<CreateElectionCommandHandler>());
Assert.IsTrue(container.IsRegistered<TerminateElectionCommandHandler>());
Assert.AreEqual(1, localBus.HasSubscription<CreateElection>().Count());
Assert.AreEqual(1, localBus.HasSubscription<TerminateElection>().Count());
如果我使用环回运行上述代码
configurator.ReceiveFrom("loopback://localhost/testqueue");
配置(注释掉rabbitmq配置),测试将通过。
如果我注释掉“环回”配置并在
configurator.ReceiveFrom("rabbitmq://localhost/commandqueue");
configurator.UseRabbitMq();
配置,测试将失败。(注意:rabbitmq 队列已经启动并运行——我一直在使用它作为我的 POC 的一部分)。具体来说,它将在断言上失败:
Assert.AreEqual(1, localBus.HasSubscription<CreateElection>().Count());
Assert.AreEqual(1, localBus.HasSubscription<TerminateElection>().Count());
谁能帮我理解这里发生了什么?我是 MT 的新手,我完全预料到我会遗漏一些东西,或者没有正确配置一些东西。
我是否正确假设如果没有注册消息订阅,那么总线将无法交付给我的任何消费者(即使消费者已注册)?
非常感谢任何帮助!