STOMP を有効にする
STOMP over WebSocket サポートは、spring-messaging
および spring-websocket
モジュールで利用できます。これらの依存関係を取得したら、次の例に示すように、WebSocket 経由で STOMP エンドポイントを公開できます。
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/portfolio"); (1)
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.setApplicationDestinationPrefixes("/app"); (2)
config.enableSimpleBroker("/topic", "/queue"); (3)
}
}
1 | /portfolio は、WebSocket(または SockJS)クライアントが WebSocket ハンドシェイクのために接続する必要があるエンドポイントの HTTP URL です。 |
2 | 宛先ヘッダーが /app で始まる STOMP メッセージは、@Controller クラスの @MessageMapping メソッドにルーティングされます。 |
3 | サブスクリプションとブロードキャストに組み込みのメッセージブローカーを使用し、宛先ヘッダーが /topic または /queue で始まるメッセージをブローカーにルーティングします。 |
次の例は、前述の例に相当する 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">
<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] (英語) — サンプルアプリケーション。