ActiveMQ找不到连接

时间:2015-12-23 15:22:09

标签: c# activemq

我已在服务器上安装了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端口。我检查了其他类似的帖子,但没有帮助解决问题。欢迎任何帮助。

感谢。

2 个答案:

答案 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与早期版本不同。

  1. 较新版本具有预先配置的工厂URL的查找列表(以找到正确的装配和工厂实施)
  2. 我提到的配置文件可以覆盖程序集的名称。但是,旧版本需要配置文件提供程序集的全名(包括.dll文件扩展名),较新版本的NMSConnectionFactory会调用Assembly.Load(),在这种情况下会失败。
  3. 只需自己加载ActiveMQ程序集并实例化其工厂就不那么复杂了,但我想各个工厂之间的切换会变得更加繁琐。实际结果(如果你只关心一种工厂)是相同的。 NMSFactory的主要任务是找到所选供应商的工厂类别。

    升级此程序集时的最后一个缺陷是现在需要在连接对象上调用.Start()。

    TL; DR:检查您是否有我提到的配置文件。编辑它(删除.dll文件扩展名)或完全删除它(它可能不包含任何尚未硬编码到Apache.NMS程序集中的信息)