Rabbitmq 使用Windsor Integration时从未调用MassTransit Consumer

Rabbitmq 使用Windsor Integration时从未调用MassTransit Consumer,rabbitmq,castle-windsor,masstransit,consumer,topshelf,Rabbitmq,Castle Windsor,Masstransit,Consumer,Topshelf,我似乎无法让温莎城堡的整合为拉比MQ的公共交通服务。在我把温莎介绍给大家之前,一切都很顺利。我引用了Castle.Windsor 3.2和MassTransit.WindsorIntegration 2.9,并配置了容器以在我的应用程序中使用。我通过以下方式注册MassTransit消费者: Container.Register(..., Types.FromThisAssembly().BasedOn<IConsumer>()); Container.Register(…,Typ

我似乎无法让温莎城堡的整合为拉比MQ的公共交通服务。在我把温莎介绍给大家之前,一切都很顺利。我引用了Castle.Windsor 3.2和MassTransit.WindsorIntegration 2.9,并配置了容器以在我的应用程序中使用。我通过以下方式注册MassTransit消费者:

Container.Register(..., Types.FromThisAssembly().BasedOn<IConsumer>());
Container.Register(…,Types.fromthissembly().BasedOn());
当我在这一行运行之后调试和检查容器时,我可以看到它成功地注册了所有使用者以及我的所有其他组件。然后,我有以下代码来初始化和注册服务总线:

var serviceBus = ServiceBusFactory.New(sbc =>
{
    sbc.UseRabbitMq();
    sbc.ReceiveFrom(Config.ServiceBusEndpoint);
    sbc.Subscribe(sc => sc.LoadFrom(Container));
});

Container.Register(Component.For<IServiceBus>().Instance(serviceBus));
var serviceBus=ServiceBusFactory.New(sbc=>
{
sbc.UseRabbitMq();
sbc.ReceiveFrom(Config.ServiceBusEndpoint);
订阅(sc=>sc.LoadFrom(Container));
});
Register(Component.For().Instance(serviceBus));
我正在使用MassTransit.WindsorIntegration提供的
LoadFrom(IWindsorContainer)
扩展方法

到目前为止,我找到的所有例子都停在这里,并指出这是您应该做的全部。不幸的是,我的消费者从未被调用,消息只是堆积在队列中(最终超时并进入错误队列)。消息显示在使用者队列中的事实(+我看到一个使用者通过RabbitMQ管理工具绑定到队列)向我表明,使用者可能已被正确订阅-因此我不确定问题出在哪里

我为Windsor和MassTransit添加了NLog日志,但日志中没有显示任何错误。我不确定此时应如何进行故障排除。有什么想法吗

此外,该应用程序目前只是一个使用Topshelf进行开发的控制台应用程序。最终,它将作为Windows服务安装。不确定这是否相关,但我想我会提到它以防万一

更新


作为一个测试,我创建了一个非常简单的消费者,使用一个无参数构造函数来处理一个非常简单的测试消息。已成功调用此消费者!然而,“真正的”消费者有依赖关系,需要通过构造函数注入到他们中。我希望容器能够解决这些问题,但显然它遇到了一些问题。奇怪的是,日志中没有关于它的内容。请继续收看…

好的,我想好了。在添加/删除NuGet包的过程中,我设法删除了一个组件(RedisClientsManager)所需的DLL(ServiceStack.Text.DLL)引用

我启动了调试器,让我的所有组件都注册,然后弹出即时窗口,并尝试逐个解析每个组件(通过调用container.resolve()),直到找到在尝试解析异常时引发异常的组件

当时温莎发出的异常信息告诉了我问题的确切原因。我有点搞不懂为什么没有记录这一点,或者为什么容器本身试图解决它时没有引发异常。无论如何,这个故事的寓意是确保你们的组件解决问题