使用ActiveMQ在Spring Websocket STOMP中路由订阅

时间:2018-05-21 11:36:49

标签: java spring activemq stomp spring-websocket

我已经使用ActiveMQ配置了Spring STOMP,它运行正常。 但是,有没有机会进行客户的订阅路由?

@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 :(得分:0)

好的,我用控制器解决了它:

@Controller
public class QueueController {

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

}

通过这种方式,我可以获得用户订阅的URL,我将在" / app / notificator" repsonse。