我正在尝试为我正在编写的一对 Windows 服务设置 RabbitMQ,以便以快速可靠的方式促进它们之间的通信。但是,我在尝试设置主要的 Windows 服务引擎时遇到了问题,这些引擎需要建立与 RabbitMQ 服务器的连接才能完成它们的工作。
基本上,ConnectionFactory
RabbitMQ 的 .NET 客户端中的对象不是抽象的,也没有实现任何接口。我看不到使用像 StructureMap 这样的 IoC 容器来注入此类的明显方法。甚至文档中的代码示例也只是明目张胆地展示了new
它,如下所示:
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = "amqp://user:pass@hostName:port/vhost";
IConnection conn = factory.CreateConnection();
呈现给我的解决方案是将整个工厂推到服务的主要OnStart
和OnStop
功能中,这真的很难测试,而且无论如何也没有太大的兴趣。然而,这给我留下了一个单一IConnection
的服务,所以如果该连接以任何方式中断,服务将无法恢复,必须简单地退出。如果主引擎对工厂有可见性,它可以简单地产生一个新的连接并继续。但是除非我注入它,否则没有连接到现有服务器就无法测试主引擎!
我在这里有什么遗漏吗?我不考虑的任何其他选择?我怎样才能注入这个工厂,如果我不能,我怎样才能限制损害?
编辑:另外,作为事后的想法,如果有人很好地了解主要开发团队对这样的更改的接受程度,我很高兴对 RabbitMQ 的 .NET 客户端进行更改以在此实现一个接口。我很乐意做出贡献,但我最不想做的就是让我的程序在一些自定义版本的 RabbitMQ 上运行,从而首先消除使用第三方库的主要好处。