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

Routing subscriptions in Spring Websocket STOMP with ActiveMQ

我已经用 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来制定这样的路由策略?

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

@Controller
public class QueueController {

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

}

这样我可以获得 url 用户订阅,我将在“/app/notificator”响应中调用它。