[英]Is it possible to have different controllers for each stomp endpoint in Spring Boot?
是否可以为每个 stomp 端点分配不同的 Controller 或至少分配不同的 MessageMapping? 我的目标是让 client1 连接到 /endpoint1 和 client2 连接到 /endpoint2 而 client1 不能访问 /endpoint2 的任何主题/队列,反之亦然(它们是完全不同的应用程序)。 因此,它们将是基于它们所连接的端点的完全封装的实现。
能够为每个端点使用不同的 Jackson ObjectMapper 的奖励积分。
到目前为止,我已经创建了一个带有 2 个端点(/endpoint1 和 /endpoint2)的 websocket 配置:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/endpoint1", "/endpoint2")
.setAllowedOriginPatterns("*")
.withSockJS();
}
// etc...
}
我还有一个 Controller 可以处理请求并将它们发送到适当的用户响应队列,但它可以从两个端点访问:
@Controller
public class WebSocketController {
@MessageMapping("/request")
@SendToUser("/queue/response")
public MyResponse handleMessage(MyRequest request) {
// implementation
}
}
当前行为:在我当前的实现中,我的客户端连接到哪个端点并不重要,两者都可以访问相同的主题,这是不受欢迎的行为。
您应该更改您的应用程序设计,以便客户端只能将消息发送到它们各自的STOMP目的地。 您可以使用特定于客户端的前缀方式命名您的STOMP目的地,例如:
/endpoint1/request
/endpoint2/request
然后,您应该能够在上述命名模式之后定义不同的@MessageMapping
消息处理程序:
@Controller
public class WebSocketController {
@MessageMapping("/endpoint1/request")
@SendToUser("/endpoint1/queue/response")
public MyResponse handleClient1Message(MyRequest request) {
// process STOMP message from client 1
}
@MessageMapping("/endpoint2/request")
@SendToUser("/endpoint2/queue/response")
public MyResponse handleClient2Message(MyRequest request) {
// process STOMP message from client 2
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.