Динамические очереди не создаются при подписке на тему Spring WebSocket с STOMP?

Я разрабатываю push-уведомления для всех пользователей, которые подписались на определенное событие. Пользователь подписывается на тему в RabbitMQ в формате: user-id.event-type.id. Я использую Spring Websocket, Stomp, RabbitMQ и на интерфейсе SockJS и Angular JS. Пользователь должен быть уведомлен обо всех действиях (комментарии и т. Д., Изменение даты) о событии.

Что у нас так далеко:

Сначала я аутентифицируюсь через конечную точку веб-сервиса REST и помещаю свой токен в Cookie. Затем мы подключаемся к веб-сокету. Пользователи подписываются на тему (/topic/user-45.meeting.1235) и получают уведомление. Но моя проблема в том, что некоторые пользователи не получают уведомления. Для второго пользователя по какой-то причине очередь не создается в RabbitMQ. Кто-нибудь знает почему?

Это настройки моего брокера в Spring applicationContext.xml:

<websocket:message-broker application-destination-prefix="/app">
        <websocket:stomp-endpoint path="/stomp">
            <websocket:sockjs/>
        </websocket:stomp-endpoint>
        <websocket:stomp-broker-relay relay-host="localhost" relay-port="61613" system-login="guest" system-passcode="guest" prefix="/queue, /topic"/>
    </websocket:message-broker>

и вот как подписаться через Sockjs:

var ws = new SockJS('http://' + location.host + path);
var stompClient = Stomp.over(ws);
stompClient.connect({
    username: '',
    password: '',
    host: '/'
}, function () {
    stompClient.subscribe('/topic/user-45.meeting.' + obj.id,
        function (message) {
            console.log(message);
        }, {
            persistent: true
        });
});

ОБНОВЛЕНО

Если мы указываем поле уникального идентификатора в кадре SUBSCRIBE, оно создает уникальную очередь для каждого пользователя. Это путь?

1 ответ

Насколько мне известно, вам нужно подписаться на \queue не \topicПри этом вам не нужно настраивать имя темы для разных пользователей, что будет обрабатываться sockjs в зависимости от пользователя, вошедшего в систему. А на стороне сервера вы также можете отправлять сообщения определенному пользователю, используя \queue\user\{username}\{name of queue}

Другие вопросы по тегам