我正在尝试为我编写的一对Windows服务设置RabbitMQ,以便在它们之间实现快速可靠的通信。然而,在尝试设置主要的Windows服务引擎时,我遇到了一个问题,这些引擎需要建立与RabbitMQ服务器的连接以完成它们的任务。
基本上,RabbitMQ的.NET客户端中的ConnectionFactory对象不是抽象的,并且没有实现任何接口。我无法找到一种明显的方法来使用像StructureMap这样的IoC容器注入这个类。即使是文档中的代码示例也只是简单地使用new关键字创建它,如下所示:
我想到的解决方案是将整个工厂推入服务的主要
还有其他选项吗?我是否遗漏了什么?如何注入此工厂,如果无法注入,如何限制损坏?
另外,作为补充,如果有人有一个很好的想法,关于RabbitMQ的.NET客户端实现接口的更改,我也很乐意做出贡献,但我最不想做的事情就是让我的程序在某个自定义版本的RabbitMQ上运行,从而消除使用第三方库的主要好处。
基本上,RabbitMQ的.NET客户端中的ConnectionFactory对象不是抽象的,并且没有实现任何接口。我无法找到一种明显的方法来使用像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上运行,从而消除使用第三方库的主要好处。
成功安装 'RabbitMQ.Client 2.8.6'。 成功安装 'Newtonsoft.Json 4.5.10'。 成功安装 'EasyNetQ 0.8.1.37'。 安装失败。正在回滚... 已经引用了较新版本的 'RabbitMQ.Client'。
- tmesser