确认stomp消息时出错

时间:2015-04-30 04:05:02

标签: spring websocket activemq stomp

我们正在使用弹簧踩踏websockets,由ActiveMQ 5.11.1支持。 当客户端确认消息时,我得到了这个例外:

"<<< ERROR

内容类型:文本/无格式 消息:收到消息ID [ID \ cjanus-61128-1430365808166-2 \ c1 \ c-1 \ c1 \ c1]的意外ACK 内容长度:722

org.apache.activemq.transport.stomp.ProtocolException:收到message-id的错误ACK [ID:janus-61128-1430365808166-2:1:-1:1:1]     at 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)     at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214)     at 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设置为客户端个人,但没有帮助。 有人可以告诉我我错过了什么/做错了吗?

1 个答案:

答案 0 :(得分:1)

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

  

ACK帧必须包含一个匹配ack头的id头   MESSAGE得到承认。

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