подтверждение сообщения stomp от клиента
Я использую Spring/stomp/websocket framework для асинхронного уведомления пользователей о сообщениях. Я сделал это успешно. Однако я бы получил ACK от клиента, чтобы некоторые действия на стороне сервера могли иметь место, когда это будет сделано.
поток примерно как потоки:
- служба уведомляет конкретного пользователя о решении и обновляет запись в БД со статусом = "уведомлено"
- клиент получает сообщение (используя стомпклиент.подписывать.(..))
- клиент подтверждает, что сообщение было получено.
-
служба "знает", что это сообщение было подтверждено, и обновляет статус до" 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.), опирается на простой цикл отправки сообщений и не подходит для кластеризации. Как альтернативные приложения можно обновить с помощью полнофункциональное сообщение брокер.