【问题标题】:rabbitmq amqp version negotiation failing with Qpid 6.0.0rabbitmq amqp 版本协商失败,Qpid 6.0.0
【发布时间】:2016-05-16 03:12:30
【问题描述】:

我正在运行 rabbitmq server 3.1.5 并尝试从 Qpid 6.0.0 客户端(均在 Linux 上运行)连接到此代理。 rabbitmq 代理正在使用 amqp 0-9-1。当我尝试从 Qpid 客户端连接时,它会因“连接重置”而​​失败。从 Qpid 客户端堆栈跟踪(我已经屏蔽了 IP 地址的前两个八位字节):

Caused by: org.apache.qpid.AMQException: Cannot connect to broker (tcp://xx.yy.224.41:5672): Connection reset [error code 200: reply success]
        at org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:248)
        at org.apache.qpid.client.AMQConnection.makeBrokerConnection(AMQConnection.java:732)
        at org.apache.qpid.client.AMQConnection.makeConnection(AMQConnection.java:504)
        ... 5 more
Caused by: org.apache.qpid.transport.ConnectionException: Connection reset
        at org.apache.qpid.transport.ConnectionException.rethrow(ConnectionException.java:67)
        at org.apache.qpid.transport.Connection.connect(Connection.java:277)
        at org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:227)
        ... 7 more

在 RabbitMQ 代理端,日志文件显示:

=INFO REPORT==== 5-Feb-2016::11:54:13 ===
accepting AMQP connection <0.7834.0> (xx.yy.224.33:37655 -> xx.yy.224.41:5672)

=ERROR REPORT==== 5-Feb-2016::11:54:13 ===
closing AMQP connection <0.7834.0> (xx.yy.224.33:37655 -> xx.yy.224.41:5672):
{bad_version,{1,1,0,10}}

rabbitmq 错误消息表明它正在拒绝来自 Qpid 客户端的建议 amqp 版本 1-0-10。

我捕获了尝试会话的 tcpdump 跟踪,我看到客户端(以上 .33)打开 TCP 连接,发送协议 ID 为 1-1,版本 0-10 的 amqp 消息,然后通过发送另一个协议 ID 为 0-0,版本 9-1 的 amqp 消息。但是,rabbitmq broker端(以上.41)在1-0-10消息后似乎放弃了,并在不处理0-9-1 amqp消息的情况下重置了TCP连接。

4      SYN-SENT       xx.yy.224.33:35770 > xx.yy.224.41:amqp
4      SYN-RECEIVED   xx.yy.224.33:35770 > xx.yy.224.41:amqp
4      ESTABLISHED    xx.yy.224.33:35770 > xx.yy.224.41:amqp
AMQP...  this one is {1,1,0,10}
AMQP..  . this one is {0,0,9,1}
4      RESET          xx.yy.224.33:35770 > xx.yy.224.41:amqp

有什么想法可以让 rabbitmq 代理进行 {0,0,9,1} 版本协商吗?

【问题讨论】:

    标签: tcp rabbitmq amqp qpid


    【解决方案1】:

    Rabbimq 实现 AMQP 0.9.1 和 qpid 客户端 1.0。

    尝试使用 AMQP 1.0 RabbitMQ 插件。

    您可以使用以下方式启用它:

    rabbitmq-plugins enable rabbitmq_amqp1_0
    The following plugins have been enabled:
      rabbitmq_amqp1_0 
    

    read here

    AMQP 1.0 客户端的当前字段有些受限。所以 我们还没有达到我们希望的那样多的互操作性。

    我们已经针对:

    SwiftMQ Java client [1] We have done most of our testing against this client and things seem to work.
    
    QPid / Proton C client [2] We have successfully tested against the "proton" command line tool this client ships with.
    
    QPid / Proton Java client [2] We have not been able to get this client to get as far as opening a network connection (tested against
    

    0.2 和 0.4)。

    【讨论】:

    • 我安装了amqp 1.0插件并重新启动了rabbitmq服务器,但它似乎并没有改变我的结果。
    【解决方案2】:

    您正在使用 Qpid Client for earlier versions,它使用 AMQP 0-8 到 0-10。它的默认行为是在 0-10 处发起连接,然后协商是否收到来自 Broker 的不同协议响应。

    当将此客户端连接到 RabbitMQ 时,您应该会在 0-10 看到连接尝试,Rabbit 会以 0-91 协议响应拒绝该连接,然后客户端应根据此建议自动重试。从您在上面发布的内容来看,Rabbit 似乎在坚持自己的讨价还价。

    如果您打开 Qpid 客户端的日志记录(记录器 org.apache.qpid 到 DEBUG),这可能有助于您了解为什么会出错。

    作为比较,这是我将 Qpid 客户端连接到 RabbitMQ 3.5.4 时看到的内容(省略了一些多余的行)。

    08:22:39.091 [main] 调试 org.apache.qpid.transport.Connection - 发送:[conn:a069435] AMQP.1 0-10 08:22:39.096 [IoRcvr-/127.0.0.1:60542-localhost/127.0.0.1:5672] 调试 org.apache.qpid.transport.Connection - RECV: [conn:a069435] AMQP.0 9-1 08:22:39.097 [IoRcvr-/127.0.0.1:60542-localhost/127.0.0.1:5672] 调试 org.apache.qpid.transport.Connection - 连接关闭:conn:a069435 08:22:39.100 [main] 调试 o.a.q.c.​​protocol.AMQProtocolSession - 将 ProtocolVersion 设置为:0-91 08:22:39.109 [main] 调试 o.a.qpid.client.AMQProtocolHandler - 发送:AMQP0091

    作为替代方案,您可以使用系统属性qpid.amqp.version 将 Qpid 客户端锁定到特定协议版本。以-Dqpid.amqp.version=0-91 开头的代码意味着它将完全跳过协商阶段。

    【讨论】:

    • 谢谢,您的描述与我观察到的相符,并且使用命令行参数将版本设置为 0-91 解决了版本协商问题!
    • 很高兴听到 qpid.amqp.version 解决方法对您有用。如果您可以打开日志记录以暴露原始的潜在问题,并在 users@qpid.apache.org (qpid.apache.org/discussion.html) 上报告,我们将不胜感激。
    猜你喜欢
    • 2018-02-12
    • 2013-12-12
    • 2019-05-30
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2018-09-22
    相关资源
    最近更新 更多