【发布时间】:2015-06-04 00:02:02
【问题描述】:
我正在使用 spring/stomp/websocket 框架来异步通知用户消息。我已经成功地做到了。但是,我会从客户端获得 ACK,以便在完成后可以执行一些服务器端操作。
流程大致如流程:
- 服务通知特定用户有关决定并更新数据库中状态 = "notified" 的记录
- 客户端接收消息(使用 stompClient.subscribe(...))
- 客户端确认已收到消息。
-
服务“知道”此消息已被确认,并在 DB 中将状态更新为“ACK”。
stompClient.connect({login:'guest', passcode:'guest'}, function(frame) { setConnected(true); **var headers = {ack: 'client'};** ... stompClient.subscribe('/user/guest/response',function(notification) { //doSomething }), **headers**); }
在服务中,发送消息:
this.messagingTemplate.convertAndSendToUser(user, "/response",msg, map);
有没有办法在服务器端处理客户端 ACK? 或者,我尝试做一个
stompClient.send("/app/response/ack/"+messageId);
在客户端,在处理订阅的方法中,但徒劳无功。
谁能告诉我处理确认的标准方法是什么?我已经为此苦苦挣扎了几天,任何想法都会非常有帮助。
谢谢!
【问题讨论】:
-
我可以通过在收到消息后手动执行 stompClient.send(...) 来解决我的问题。这不是我想要使用的完美 ACK,但现在可以使用。最好了解 spring stomp ws 框架如何处理 ACKS。
标签: spring websocket stomp subscribe