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