セパレーターとしてのドット
メッセージが @MessageMapping
メソッドにルーティングされると、それらは AntPathMatcher
と照合されます。デフォルトでは、パターンは区切り文字としてスラッシュ(/
)を使用することが期待されています。これは、Web アプリケーションでは適切な規則であり、HTTP URL に似ています。ただし、メッセージング規則に慣れている場合は、区切り文字としてドット(.
)を使用するように切り替えることができます。
次の例は、その方法を示しています。
Java
Kotlin
XML
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
// ...
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setPathMatcher(new AntPathMatcher("."));
registry.enableStompBrokerRelay("/queue", "/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfiguration : WebSocketMessageBrokerConfigurer {
// ...
override fun configureMessageBroker(registry: MessageBrokerRegistry) {
registry.setPathMatcher(AntPathMatcher("."))
registry.enableStompBrokerRelay("/queue", "/topic")
registry.setApplicationDestinationPrefixes("/app")
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
https://www.springframework.org/schema/websocket/spring-websocket.xsd">
<websocket:message-broker application-destination-prefix="/app" path-matcher="pathMatcher">
<websocket:stomp-endpoint path="/stomp"/>
<websocket:stomp-broker-relay prefix="/topic,/queue" />
</websocket:message-broker>
<bean id="pathMatcher" class="org.springframework.util.AntPathMatcher">
<constructor-arg index="0" value="."/>
</bean>
</beans>
その後、次の例に示すように、コントローラーは @MessageMapping
メソッドの区切り文字としてドット(.
)を使用できます。
Java
Kotlin
@Controller
@MessageMapping("red")
public class RedController {
@MessageMapping("blue.{green}")
public void handleGreen(@DestinationVariable String green) {
// ...
}
}
@Controller
@MessageMapping("red")
class RedController {
@MessageMapping("blue.{green}")
fun handleGreen(@DestinationVariable green: String) {
// ...
}
}
これで、クライアントは /app/red.blue.green123
にメッセージを送信できます。
前の例では、「ブローカーリレー」のプレフィックスは外部メッセージブローカーに完全に依存しているため、変更しませんでした。使用するブローカーの STOMP ドキュメントページを参照して、宛先ヘッダーに対してサポートしている規則を確認してください。
一方、「単純なブローカー」は設定された PathMatcher
に依存するため、セパレーターを切り替えると、その変更はブローカーにも適用され、ブローカーがメッセージから宛先をサブスクリプションのパターンに一致させる方法にも適用されます。