繁体   English   中英

是否可以为 Spring Boot 中的每个 stomp 端点设置不同的控制器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM