使用 Amqp.net lite 连接到 qpid 队列。抛出异常 amqp:connection:forced

Connecting to a qpid queue using Amqp.net lite. throws exception amqp:connection:forced

我正在尝试设置一个简单的示例来连接到队列并向队列发送消息。我们删除了 qpid 的身份验证,这样就不需要用户名和密码了。发生的事情是,一旦它尝试发送消息,我收到消息 amqp:connection:forced

的 AMQP 异常

这个异常是什么意思?知道我可能错过了什么吗?

        string broker = "amqp://linuxlab.netigrate.net:5672";
        string outQueue = "toVCC";
        string inQueue = "fromVCC";

        Connection.DisableServerCertValidation = true;

        Connection connection = null;

        try
        {
            Address address = new Address(broker);
            connection = new Connection(address);
            Session session = new Session(connection);

            SenderLink sender = new SenderLink(session, "sendAndRecieve.send", outQueue);

            Message message = new Message("Hello");

            sender.Send(message);

来自 amqp:connection:forced 错误代码的 AMQP 1.0 规范:

An operator intervened to close the connection for some reason. The client could retry at some later date. 

所以远程端告诉您的客户端它无法连接。

我会检查代理端的日志,看看是否有一些关于连接的有意义的错误信息。

当 AMQP 版本不匹配时,通常会出现此错误。在您的情况下,Amqp.Net Lite 仅使用 AMQP 1.0 版本,而 Qpidd 代理可能 运行 仅使用 AMQP 0-10 版本。获得提示的一种方法是在执行代理之前在您的环境中 SET QPID_LOG_ENABLE=trace+ 。跟踪应该暴露不匹配。

要让 Qpidd 代理使用 AMQP 1.0,您可以使用以下两种方法之一:

  • 使用 --load-module amqp.dll(或 linux 系统上的 amqp.so)显式加载 AMQP 1.0 库。
  • 使用 --module-dir somepath 指示代理加载所有模块,其中路径是包含 amqp.dll(或 .so)的文件夹的名称文件。

如果您从源代码构建 Qpidd,您还需要构建 qpid-proton 项目以提供 AMQP 1.0 支持。