确认 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 与规范进行比较。
我们正在使用 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 与规范进行比较。