使用 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”响应中调用它。
我已经用 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”响应中调用它。