确认 stomp 消息时出错

Error while acknowledging stomp message

我们正在使用 spring stomp over websockets,由 ActiveMQ 5.11.1 支持。 当客户端确认一条消息时,我得到这个异常:

"<<< ERROR

内容类型:text/plain message:Unexpected 收到消息 ID [ID\cjanus-61128-1430365808166-2\c1\c-1\c1\c1] 的 ACK 内容长度:722

org.apache.activemq.transport.stomp.ProtocolException:收到消息 ID [ID:janus-61128-1430365808166-2:1:-1:1:1] 的意外 ACK 在 org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:462) 在 org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:247) 在 org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:75) 在 org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83) 在 org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214) 在 org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) 在 java.lang.Thread.run(Thread.java:744)

客户端代码如下:

  var sub_id = stompClient.subscribe('/user/guest/msg', function(greeting){              
                x = JSON.parse(greeting.body);
                var message_id = greeting.headers['message-id']
                stompClient.ack(message_id, sub_id);
             }, {ack: 'client'});

我尝试将 ack 设置为客户端个人,但没有帮助。 谁能告诉我我哪里错了missing/doing?

连接使用哪个 STOMP 版本(1.0、1.1 或 1.2)? STOMP 1.2 有一个 breaking change:

The ACK frame MUST include an id header matching the ack header of the MESSAGE being acknowledged.

我建议使用数据包嗅探器或调试器捕获 STOMP 流量,并将 headers 与规范进行比较。