gpt4 book ai didi

rabbitmq - 使用 Autofac 进行总线配置 : Issue with RabbitMQ vs Loopback?

转载 作者:行者123 更新时间:2023-12-02 20:14:25 25 4
gpt4 key购买 nike

由于某种原因,我无法发布到 masstransit google group ,尽管我加入了,但我被告知我没有在该组发帖的权限。所以我要在这里发帖...

现在解决我的问题:

我正在使用 MassTransit v2.7.2 和 AutoFac v2.6.3。我正在尝试配置 Autofac 来扫描程序集并注册我的消费者;所有实现 IConsumer 接口(interface)的类型。这似乎有效。

当我配置总线时,我使用 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的config),测试就通过了。

如果我注释掉“loopback”配置并在

中进行注释
 configurator.ReceiveFrom("rabbitmq://localhost/commandqueue");
configurator.UseRabbitMq();

配置,测试将失败。 (注意:rabbitmq 队列已经启动并正在运行 - 我一直在使用它作为我的 POC 的一部分)。具体来说,它将在断言上失败:

Assert.AreEqual(1, localBus.HasSubscription<CreateElection>().Count());
Assert.AreEqual(1, localBus.HasSubscription<TerminateElection>().Count());

有人可以帮我理解这里发生了什么吗?我是 MT 的新手,所以完全预料到我会遗漏一些东西,或者没有正确配置一些东西。

我是否正确地假设,如果没有注册消息订阅,那么总线将无法传递给我的任何消费者(即使消费者已注册)?

非常感谢任何帮助!

最佳答案

使用 RabbitMQ,在发布消息之前,订阅不会添加到出站总线。这是由于如何检查类以及创建适当交换的出站端点并将其添加到管道中。

所以,是的,这个测试对于 RabbitMQ 会失败,但实际上当消息发布时它会正常工作。

HasSubscription() 调用实际上是为了验证消费者等是否使用环回传输正确配置,并且实际上只是为了审查那些不是真正集成问题的东西,而只是确保内部 MassTransit 代码正常工作。

因此,如果您要添加其中一种类型的 Publish() 调用,然后调用 HasSubscription() 扩展方法,它将通过。

关于rabbitmq - 使用 Autofac 进行总线配置 : Issue with RabbitMQ vs Loopback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com