从客户端收到消息确认

时间:2015-03-30 20:02:43

标签: spring websocket stomp subscribe

我使用spring / stomp / websocket框架以异步方式通知用户消息。我成功完成了这个。但是,我会从客户端获得ACK,以便在完成此操作时可以执行某些服务器端操作。

流程大致如流:

  1. 服务通知特定用户有关决定并更新数据库中的记录,状态="已通知"
  2. 客户端收到消息(使用stompClient.subscribe(...))
  3. 客户确认已收到该邮件。
  4. 服务"知道"该消息已被确认并将状态更新为" ACK"在DB。

    stompClient.connect({login:'guest', passcode:'guest'}, 
           function(frame) {
             setConnected(true);
             **var headers = {ack: 'client'};**
            ...
    
    
        stompClient.subscribe('/user/guest/response',function(notification) {
            //doSomething
        }), **headers**);
    }
    
  5. 在服务中,发送消息:

      this.messagingTemplate.convertAndSendToUser(user, "/response",msg, map);
    

    有没有办法在服务器端处理客户端ACK? 或者,我试图做一个

    stompClient.send("/app/response/ack/"+messageId);
    

    在客户端上,在处理订阅的方法中,但是徒劳无功。

    有人可以告诉我处理确认的标准方法是什么?我一直在努力解决这个问题几天,任何想法都会非常有用。

    谢谢!

2 个答案:

答案 0 :(得分:3)

根据spec使用ACK框架。服务器发送ack:some_id标头,客户端使用some_id框架中的ACK

答案 1 :(得分:2)

简单经纪人的答案是

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

  

简单的经纪人非常适合入门,但只支持a   STOMP命令的子集(例如没有回答,收据等)依赖于a   简单的消息发送循环,不适合集群。作为一个   替代方案,应用程序可以升级到使用功能齐全的消息   代理。