javax.jms.JMSException - 线路格式协商超时 - 对等方未发送其线路格式。
常见问题解答 > 错误 > 异常 > javax.jms.JMSException - 线路格式协商超时 - 对等方未发送其线路格式。
如果您遇到这样的异常
javax.jms.JMSException: Wire format negociation timeout: peer did not send his wire format.
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:58)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1185)
at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1263)
at org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:449)
它可能意味着以下三种情况之一
-
您连接到 ActiveMQ Classic TCP 传输未使用的端口
请确保您连接到正确的 host:port
-
您使用 log4j JMS 附加器并且没有过滤掉 ActiveMQ Classic 日志消息
请务必阅读 如何使用 log4j JMS 附加器与 ActiveMQ Classic,更重要的是,切勿将 ActiveMQ Classic 日志消息发送到 JMS 附加器
-
您的代理可能负载过重(或网络连接不可靠),因此连接设置无法在合理的时间内完成
如果您偶尔遇到此类异常,最佳解决方案是使用 故障转移传输,以便您的客户端可以在第一次尝试失败时尝试重新连接。如果您更频繁地遇到此类异常,您还可以尝试延长线路格式协商时间段(默认 10 秒)。您可以通过在客户端连接 URL 中使用 wireFormat.maxInactivityDurationInitalDelay
属性来实现。例如
tcp://127.0.0.1:61616?wireFormat.maxInactivityDurationInitalDelay=30000
将使用 30 秒超时。