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

时间:2015-10-20 14:10:13

标签: .net amqp qpid

我正在尝试设置一个简单的示例来连接并向队列发送消息。我们删除了qpid的身份验证,以便不需要用户名和密码。会发生什么是一旦它尝试发送消息我得到一个AMQP异常,消息amqp:connection:forced

这个例外是什么意思?以及我可能错过的任何想法?

        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);

2 个答案:

答案 0 :(得分:0)

来自AMQP 1.0规范amqp:connection:强制错误代码:

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

所以远程方告诉你的客户无法连接。

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

答案 1 :(得分:0)

当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支持。