2

我正在尝试从 .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);
  }
}
4

3 回答 3

1

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

于 2014-03-15T11:13:16.587 回答
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:),它将查找遵循 format 的文件名nmsprovider-{protocol}.config。它将加载该文件以查找程序集和类工厂名称。这允许在运行时使用新的提供程序实现来扩展主 NMS 库。

于 2014-04-23T19:51:02.527 回答
0

类似的事情也发生在我身上。我通过确保项目中包含引用“Apache.NMS”和“Apache.NMS.ActiveMQ”来解决它。我使用 NuGet 包管理器来安装它们。

于 2017-04-12T23:54:50.730 回答