无法从.NET连接到ActiveMQ:没有IConnectionFactory实现

时间:2014-03-14 16:45:39

标签: c# activemq .net-4.5 apache-nms

我试图从.NET客户端连接到ActiveMQ。 ActiveMQ服务器已启动并正在运行。我可以从浏览器访问管理控制台。

当我运行下面的代码时,我在尝试创建NMSCOnnectionFactory时遇到异常。我不知道为什么会这样,也不知道如何解决它。我尝试了各种端口,但这确实是问题所在。有什么想法吗?

"No IConnectionFactory implementation found for connection URI: amqp://localhost:61616/"

public static void Main(string[] args)
{
  try
  {
    Uri connecturi = new Uri("amqp://localhost:61616");

    Console.WriteLine("About to connect to " + connecturi);

    IConnectionFactory factory = new NMSConnectionFactory(connecturi, "Bob", "protocol:" +   "amqp1.0");
  }
  catch (Exception e)
  {
    Console.WriteLine("Exception {0}.", e);
  }
}

3 个答案:

答案 0 :(得分:1)

当前版本的NMS客户端库中不支持AMQP。在svn中有一个实验性实现,您可以尝试但是您需要从源构建它,然后使用它自己的ConnectionFactory实例,因为NMS API库没有它的映射。发布AMQP版本时,您应该能够使用这样的代码,但是您需要同时拥有NMS API lib和项目中引用的NMS.AMQP lib。

答案 1 :(得分:0)

Tim提到,目前的版本中没有AMQP支持。但是,通过向项目添加配置文件,原始代码段将起作用(无需链接到特定的提供程序实现程序集)。将文件命名为nmsprovider-amqp.config,其中包含以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <provider assembly="Apache.NMS.AMQP.dll" classFactory="Apache.NMS.AMQP.ConnectionFactory"/>
</configuration>

有了这个文件,你只需要在编译时引用Apache.NMS.dll程序集。实例化NMSConnectionFactory对象时,它将尝试加载众所周知的协议的实现提供程序。如果在连接URI中指定了未知协议(例如 amqp:),则它将查找格式为nmsprovider-{protocol}.config的文件名。它将加载该文件以查找程序集和类工厂名称。这允许在运行时使用新的提供程序实现扩展主NMS库。

答案 2 :(得分:0)

类似的事情也发生在我身上。我通过确保引用&#34; Apache.NMS&#34;来解决它。和#34; Apache.NMS.ActiveMQ&#34;被列入该项目。我使用NuGet包管理器来安装它们。