从客户端收到消息确认

mys*_*pri 10 spring stomp subscribe websocket

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

流程大致如下:

  1. 服务通知特定用户有关决策并使用status ="已通知"更新数据库中的记录
  2. 客户端收到消息(使用stompClient.subscribe(...))
  3. 客户确认收到了该消息.
  4. 服务"知道"该消息已被确认,并将状态更新为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**);
    }
    
    Run Code Online (Sandbox Code Playgroud)

在服务中,消息被发送:

  this.messagingTemplate.convertAndSendToUser(user, "/response",msg, map);
Run Code Online (Sandbox Code Playgroud)

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

stompClient.send("/app/response/ack/"+messageId);
Run Code Online (Sandbox Code Playgroud)

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

有人可以告诉我什么是处理确认的标准方法?我一直在努力奋斗这几天,任何想法都会非常有帮助.

谢谢!

use*_*272 5

对于简单的经纪人来说,答案是否定的

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

简单的代理非常适合入门,但仅支持 STOMP 命令的子集(例如no acks、receipts等),依赖于简单的消息发送循环,并且不适合集群。作为替代方案,应用程序可以升级为使用功能齐全的消息代理。


btk*_*btk 4

ACK按照规格使用框架。服务器发送ack:some_id标头,客户端在帧some_id中使用该标头ACK

  • 但是,spring 不在服务器端处理这个问题吗? (5认同)