跳到主要内容

点作为分隔符

ChatGPT-4o-mini 中英对照 Dots as Separators

当消息被路由到 @MessageMapping 方法时,它们会与 AntPathMatcher 进行匹配。默认情况下,模式预计使用斜杠 (/) 作为分隔符。这在 web 应用程序中是一个良好的约定,并且与 HTTP URL 类似。然而,如果您更习惯于消息传递约定,可以切换为使用点 (.) 作为分隔符。

以下示例展示了如何做到这一点:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

// ...

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setPathMatcher(new AntPathMatcher("."));
registry.enableStompBrokerRelay("/queue", "/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
java

之后,控制器可以在 @MessageMapping 方法中使用点 (.) 作为分隔符,如下例所示:

@Controller
@MessageMapping("red")
public class RedController {

@MessageMapping("blue.{green}")
public void handleGreen(@DestinationVariable String green) {
// ...
}
}
java

客户端现在可以向 /app/red.blue.green123 发送消息。

在前面的示例中,我们没有更改“broker relay”的前缀,因为这些完全依赖于外部消息代理。请参阅您使用的代理的 STOMP 文档页面,以了解它支持的目标头的约定。

另一方面,“简单代理”确实依赖于配置的 PathMatcher,因此,如果您更改分隔符,该更改也会应用于代理,以及代理将消息中的目标与订阅中的模式进行匹配的方式。