首页 > 解决方案 > 如何区分 Spring Messaging 中的目标以进行套接字交换

问题描述

WebSocketMessageBrokerConfigurer的实现必须实现两个方法。configureMessageBroker就是其中之一:

public void configureMessageBroker(MessageBrokerRegistry registry) {
            registry.setApplicationDestinationPrefixes("/app")...};

在这个例子中,我们配置了所有带有“/app”前缀的消息将被路由到控制器类中的@MessageMapping-annotated 方法。

但是setApplicationDestinationPrefixes接受可变长度的字符串数组。如果我们有多个前缀,如何在控制器中将所有使用@MessageMapping 注释的特定方法分配给特定前缀?

标签: springspring-websocketspring-messaging

解决方案


最初我认为答案是不仅在方法上而且在控制器类上使用@MessageMapping,并将控制器级注释映射到前缀,而方法级注释映射到路由的下部。

我在https://docs.spring.io/spring-framework/docs/4.3.x/spring-framework-reference/html/websocket.html找到了一个例子,它给了我这个想法:

@Controller
@MessageMapping("foo")
public class FooController {

    @MessageMapping("bar.{baz}")
    public void handleBaz(@DestinationVariable String baz) {
    }
}

但后来我注意到这种组合解决了路线“/app/foo.bar.{baz}”。{baz} 是这里的占位符


推荐阅读