STOMP を有効にする

STOMP over WebSocket サポートは、spring-messaging および spring-websocket モジュールで利用できます。これらの依存関係を取得したら、次の例に示すように、WebSocket 経由で STOMP エンドポイントを公開できます。

  • Java

  • Kotlin

  • XML

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		// /portfolio is the HTTP URL for the endpoint to which a WebSocket (or SockJS)
		// client needs to connect for the WebSocket handshake
		registry.addEndpoint("/portfolio");
	}

	@Override
	public void configureMessageBroker(MessageBrokerRegistry config) {
		// STOMP messages whose destination header begins with /app are routed to
		// @MessageMapping methods in @Controller classes
		config.setApplicationDestinationPrefixes("/app");
		// Use the built-in message broker for subscriptions and broadcasting and
		// route messages whose destination header begins with /topic or /queue to the broker
		config.enableSimpleBroker("/topic", "/queue");
	}
}
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfiguration : WebSocketMessageBrokerConfigurer {

	override fun registerStompEndpoints(registry: StompEndpointRegistry) {
		// /portfolio is the HTTP URL for the endpoint to which a WebSocket (or SockJS)
		// client needs to connect for the WebSocket handshake
		registry.addEndpoint("/portfolio")
	}

	override fun configureMessageBroker(config: MessageBrokerRegistry) {
		// STOMP messages whose destination header begins with /app are routed to
		// @MessageMapping methods in @Controller classes
		config.setApplicationDestinationPrefixes("/app")
		// Use the built-in message broker for subscriptions and broadcasting and
		// route messages whose destination header begins with /topic or /queue to the broker
		config.enableSimpleBroker("/topic", "/queue")
	}
}
<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">
		<websocket:stomp-endpoint path="/portfolio" />
		<websocket:simple-broker prefix="/topic, /queue"/>
	</websocket:message-broker>

</beans>
組み込みの単純なブローカーの場合、/topic および /queue プレフィックスには特別な意味はありません。それらは、pub-sub メッセージングとポイントツーポイントメッセージング(つまり、多くのサブスクライバーと 1 つのコンシューマー)を区別するための単なる規則です。外部ブローカーを使用する場合は、ブローカーの STOMP ページを確認して、サポートしている STOMP 宛先とプレフィックスの種類を理解しましょう。

ブラウザーから接続するには、STOMP の場合、最もアクティブに保守されている JavaScript ライブラリである stomp-js/stompjs [GitHub] (英語) を使用できます。

次のコード例はこれに基づいています。

const stompClient = new StompJs.Client({
       brokerURL: 'ws://domain.com/portfolio',
       onConnect: () => {
           // ...
       }
   });

あるいは、SockJS 経由で接続する場合は、次の手順 (英語) に従って、サーバー側で registry.addEndpoint("/portfolio").withSockJS() を使用して SockJS フォールバックを有効にし、JavaScript 側で SockJS フォールバックを有効にすることができます。

上記の例の stompClient は、login および passcode ヘッダーを指定する必要がないことに注意してください。たとえそれが行われたとしても、それらはサーバー側では無視されます(むしろ上書きされます)。認証の詳細については、ブローカーへの接続および認証を参照してください。

その他のサンプルコードについては、以下を参照してください。