我似乎无法通过 RabbitMQ 让 Castle Windsor Integration 为 Mass Transit 工作。在我将温莎引入图片之前,一切都很好。我引用了 Castle.Windsor 3.2 和 MassTransit.WindsorIntegration 2.9 并配置了容器以在我的应用程序中使用。我正在通过以下方式注册 MassTransit 消费者:
Container.Register(..., Types.FromThisAssembly().BasedOn<IConsumer>());
当我在运行此行后调试和检查容器时,我可以看到它成功注册了所有消费者以及我的所有其他组件。然后我有以下代码来初始化和注册服务总线:
var serviceBus = ServiceBusFactory.New(sbc =>
{
sbc.UseRabbitMq();
sbc.ReceiveFrom(Config.ServiceBusEndpoint);
sbc.Subscribe(sc => sc.LoadFrom(Container));
});
Container.Register(Component.For<IServiceBus>().Instance(serviceBus));
我正在使用LoadFrom(IWindsorContainer container)
MassTransit.WindsorIntegration 提供的扩展方法。
到目前为止,我发现的所有示例都停在这里,并表明这是您应该做的所有事情。对我来说不幸的是,我的消费者从未被调用,消息只是堆积在队列中(最终超时并进入错误队列)。消息完全显示在消费者队列中的事实(+ 我看到一个消费者通过 RabbitMQ 管理工具绑定到队列)向我表明消费者可能被正确订阅 - 所以我不确定在哪里问题出在。
我为 Windsor 和 MassTransit 添加了 NLog 日志记录,但日志中没有显示任何错误。我不确定此时我应该如何进行故障排除。有任何想法吗?
此外,这个应用程序目前只是一个使用 Topshelf 进行开发的控制台应用程序。最终它将作为 Windows 服务安装。不确定这是否相关,但我想我会提到它以防万一。
更新
作为一个测试,我创建了一个非常简单的消费者,它带有一个无参数的构造函数来处理一个非常简单的测试消息。这个消费者被成功调用!然而,“真正的”消费者具有需要通过构造函数注入它们的依赖项。我希望 Container 能解决这些问题,但显然它遇到了一些麻烦。奇怪的是,日志中没有显示任何关于它的内容。敬请关注...