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
ヘッダーを指定する必要がないことに注意してください。たとえそれが行われたとしても、それらはサーバー側では無視されます(むしろ上書きされます)。認証の詳細については、ブローカーへの接続および認証を参照してください。
その他のサンプルコードについては、以下を参照してください。
株式ポートフォリオ [GitHub] (英語) — サンプルアプリケーション。