我已在服务器上安装了ActiveMQ 5.13.0 Release并尝试使用C#客户端访问代理。我创建了一个控制台应用程序并安装了Apache.NMS.ActiveMQ版本1.7.1 nuget包。当我尝试访问经纪人时:
Line 1 Uri uri = new Uri("tcp://192.168.110.136:61616");
Line 2 NMSConnectionFactory NMSFactory = new NMSConnectionFactory(uri);
在第二行,它会抛出找不到连接URI的IConnectionFactory实现:tcp://192.168.110.136:61616 / 异常。
Project的.NET Framework版本是3.5,我也尝试过使用.NET 4.0和4.5。但结果是一样的,抛出同样的异常。
ActiveMQ正在服务器上运行,我可以使用telnet和管理UI访问服务器的61616端口。我检查了其他类似的帖子,但没有帮助解决问题。欢迎任何帮助。
感谢。
答案 0 :(得分:7)
首先,请确保您的应用程序同时引用Apache.NMS.dll和Apache.NMS.ActiveMQ.dll程序集,以便能够访问所有实现位。
然后尝试使用引用您尝试通过通用NMSConnectionFactory使用的提供程序实现的URI:
Uri uri = new Uri("activemq:tcp://192.168.110.136:61616");
您可以直接使用ActiveMQ IConnectionFactory实现:
IConnectionFactory factory = new Apache.NMS.ActiveMQ.ConnectionFactory(uri);
答案 1 :(得分:0)
如果有人知道请解释之间有什么区别。
在我的项目中,我使用了Apache.NMS.ActiveMQ的一个非常旧的版本(1.1),它带有一个名为nmsprovider-activemq.config的文件。
当我升级时,我遇到了你所观察到的同类问题。
我发现NMSConnectionFactory与早期版本不同。
只需自己加载ActiveMQ程序集并实例化其工厂就不那么复杂了,但我想各个工厂之间的切换会变得更加繁琐。实际结果(如果你只关心一种工厂)是相同的。 NMSFactory的主要任务是找到所选供应商的工厂类别。
升级此程序集时的最后一个缺陷是现在需要在连接对象上调用.Start()。
TL; DR:检查您是否有我提到的配置文件。编辑它(删除.dll文件扩展名)或完全删除它(它可能不包含任何尚未硬编码到Apache.NMS程序集中的信息)