Spring boot Stomp WebSocket несколько сеансов для одного и того же пользователя - PullRequest
1 голос
/ 18 июня 2020

У меня есть приложение для весенней загрузки, в котором я использую Stomp поверх веб-сокетов и использую RabbitMQ в качестве внешнего брокера сообщений. Наше приложение также использует Spring Security. Один и тот же аутентифицированный пользователь может войти в гостиницу с помощью разных браузеров. Пользователь может подписаться в каком-либо месте назначения для получения фидов данных в реальном времени, используя Js клиент Sock JS. На бэкэнде мы используем метод simpleMessageTemplate.convertAndSentToUser для передачи sh прямых трансляций конкретному аутентифицированному пользователю.

Проблема, с которой мы сталкиваемся, заключается в том, что когда пользователь входит в систему с помощью браузера A и подписывается на пункт назначения, в RabbitMq создается уникальная очередь, такая как data-feeds-user123, с политикой автоматического удаления и одним и тем же логином пользователя из другого браузера B, но не подписывается на пункт назначения. Теперь, когда бэкэнд публикует поток данных в реальном времени с помощью метода convertAndSendToUser, происходит странное поведение. Создается новая очередь data-feeds-321, и сообщения публикуются в обеих очередях. Хотя у очереди data-feed-321 нет потребителя, и она не удаляется, когда пользователь отключается / закрывает сеанс. Такие очереди кажутся бесполезными в таком сценарии и не очищаются автоматически.

Кто-нибудь может мне помочь в этом, я не хочу транслировать сообщения, если пользователь не подписался на JS клиента.

...