Маршрутизация подписок в Spring Websocket STOMP с ActiveMQ - PullRequest
0 голосов
/ 21 мая 2018

Я настроил Spring STOMP с ActiveMQ, он работает нормально.Но есть ли возможность настроить клиентскую маршрутизацию подписки?

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableStompBrokerRelay("/topic");
    registry.setApplicationDestinationPrefixes("/app");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/ws")
            .withSockJS();
}

Чего я хочу добиться - это две очереди для уведомлений (во внешнем интерфейсе) - одна для пользователей-администраторов и одна для обычных пользователей.Пользователи не отправляют никаких сообщений, только получают сообщения с сервера.Предположим, что любой пользователь может отправить следующий запрос на подписку:

// app is application destination prefix
client.subscribe('/app/notificator', ...);

Сервер должен направить этот запрос в ActiveMQ:

/topic/notificator/admin - if logged user is of role admin, or
/topic/notificator/user - if logged user is of role user

Как настроить Spring для создания такой политики маршрутизации?

1 Ответ

0 голосов
/ 21 мая 2018

Хорошо, я решил это с помощью контроллера:

@Controller
public class QueueController {

    @SubscribeMapping("/notificator")
    public String getNotificatorQueue(Principal principal) {
        String role = // get role from principal
        return "/topic/notificator/" + role;
    }

}

Таким образом, я могу получить URL для пользовательской подписки, которую я буду вызывать в ответе "/ app / notificator".

...