セパレーターとしてのドット

メッセージが @MessageMapping メソッドにルーティングされると、それらは AntPathMatcher と照合されます。デフォルトでは、パターンは区切り文字としてスラッシュ(/)を使用することが期待されています。これは、Web アプリケーションでは適切な規則であり、HTTP URL に似ています。ただし、メッセージング規則に慣れている場合は、区切り文字としてドット(.)を使用するように切り替えることができます。

次の例は、Java 構成でこれを行う方法を示しています。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

	// ...

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

次の例は、前述の例に相当する XML 構成を示しています。

<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 メソッドの区切り文字としてドット(.)を使用できます。

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

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

これで、クライアントは /app/red.blue.green123 にメッセージを送信できます。

前の例では、「ブローカーリレー」のプレフィックスは外部メッセージブローカーに完全に依存しているため、変更しませんでした。使用するブローカーの STOMP ドキュメントページを参照して、宛先ヘッダーに対してサポートしている規則を確認してください。

一方、「単純なブローカー」は設定された PathMatcher に依存するため、セパレーターを切り替えると、その変更はブローカーにも適用され、ブローカーがメッセージから宛先をサブスクリプションのパターンに一致させる方法にも適用されます。