我们正在使用弹簧踩踏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设置为客户端个人,但没有帮助。 有人可以告诉我我错过了什么/做错了吗?
答案 0 :(得分:1)
连接使用哪个STOMP版本(1.0,1.1或1.2)? STOMP 1.2有一个breaking change:
ACK帧必须包含一个匹配ack头的id头 MESSAGE得到承认。
我建议使用数据包嗅探器或调试器捕获STOMP流量,并将标头与规范进行比较。