подтверждение сообщения stomp от клиента

Я использую Spring/stomp/websocket framework для асинхронного уведомления пользователей о сообщениях. Я сделал это успешно. Однако я бы получил ACK от клиента, чтобы некоторые действия на стороне сервера могли иметь место, когда это будет сделано.

поток примерно как потоки:

  1. служба уведомляет конкретного пользователя о решении и обновляет запись в БД со статусом = "уведомлено"
  2. клиент получает сообщение (используя стомпклиент.подписывать.(..))
  3. клиент подтверждает, что сообщение было получено.
  4. служба "знает", что это сообщение было подтверждено, и обновляет статус до" 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);

на клиенте, в методе, который обрабатывает подписка, но напрасно.

может кто-нибудь, пожалуйста, скажите мне, что такое стандартный способ обработки подтверждений? Я боролся с этим в течение нескольких дней, и любые мысли были бы очень полезны.

спасибо!

2 ответов


использовать ACK кадров в соответствии с spec. Сервер отправляет ack:some_id заголовок, клиент использует это some_id на ACK рамка.


ответ нет для простого брокера.

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

простой брокер отлично подходит для начала работы, но поддерживает только подмножество команд STOMP (например, нет acks, квитанции, etc.), опирается на простой цикл отправки сообщений и не подходит для кластеризации. Как альтернативные приложения можно обновить с помощью полнофункциональное сообщение брокер.