Я разрабатываю push-уведомление для всех пользователей, которые подписались на конкретное событие. Пользователь подписывается на тему в RabbitMQ в формате: user-id.event-type.id. Я использую Spring Websocket, Stomp, RabbitMQ, а также на интерфейсных SockJS и Angular JS. Пользователь должен быть уведомлен обо всех действиях (комментарии и т. Д., Изменении даты) по поводу события.
Что у нас есть на данный момент:
Сначала я проверяю подлинность через конечную точку веб-службы REST и помещаю свой токен в Cookie. Затем подключаемся к websocket. Пользователи подписываются на тему (/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
});
});
ОБНОВЛЕНО
Если мы укажем уникальное поле Id во фрейме SUBSCRIBE, оно создаст уникальную очередь для каждого пользователя. Это путь?