Как послать сообщение браузеру через Websocket из бэкенда?

Есть клиент-серверное приложение, написанное на java, представляющее собой набор SOA-сервисов и работающее под томкетом. Некоторые операции требуют временных затрат и, чтобы клиент не ждал, они проводятся в фоновом режиме. Однако по их окончании клиенту нужно отправить соответствующее сообщение. Идея была использовать для этого WebSocket. Сервис по окончании операции кладет сообщение в RabbitMQ. WebSocket-сервер считывает сообщение из очереди и посылает его клиентской части в браузер нужного пользователя. Во всех примерах, которые мне попались в интернете, WebSocket-сервер обычно принимает сообщение от браузера и передает его в другие подключенные браузеры (webchat), но у нас несколько другая задача, и в данный момент мне совершенно непонятно, как послать браузеру сообщения после его считывания из очереди, да и имплементация этой части в WebSocket-сервер не вполне ясна. Может, кто-нибудь сталкивался с решением подобной задачи?


Ответы (1 шт):

Автор решения: Artem Bilan

Смотри Principal аргумент для @MessageMapping или @SubscribeMapping. С этого параметра ты можешь взять getName() и использовать его позже для отправки результата этому пользователю.

Для этрпавки нам нужен SimpMessagingTemplate и его convertAndSendToUser().

Смотри документацию для больше деталей: https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#websocket-stomp-user-destination

→ Ссылка