簡體   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