外部ブローカー
シンプルなブローカーは開始に最適ですが、STOMP コマンドのサブセットのみをサポートし(ACK、受信、その他の機能はサポートしていません)、シンプルなメッセージ送信ループに依存しており、クラスタリングには適していません。別の方法として、フル機能のメッセージブローカーを使用するようにアプリケーションをアップグレードできます。
選択したメッセージブローカー(RabbitMQ (英語) 、ActiveMQ [Apache] (英語) など)の STOMP のドキュメントを参照し、ブローカーをインストールして、STOMP サポートを有効にして実行します。次に、Spring 構成で(単純なブローカーの代わりに)STOMP ブローカーリレーを有効にできます。
次の構成例では、フル機能のブローカーを有効にします。
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/portfolio").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/topic", "/queue");
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">
<websocket:stomp-endpoint path="/portfolio" />
<websocket:sockjs/>
</websocket:stomp-endpoint>
<websocket:stomp-broker-relay prefix="/topic,/queue" />
</websocket:message-broker>
</beans>
上記の構成の STOMP ブローカーリレーは、外部メッセージブローカーにメッセージを転送することでメッセージを処理する Spring MessageHandler
(Javadoc) です。そのためには、ブローカーへの TCP 接続を確立し、すべてのメッセージをブローカーに転送し、ブローカーから受信したすべてのメッセージを WebSocket セッションを介してクライアントに転送します。基本的に、メッセージを両方向に転送する「リレー」として機能します。
TCP 接続管理のために、io.projectreactor.netty:reactor-netty および io.netty:netty-all 依存関係をプロジェクトに追加します。 |
さらに、アプリケーションコンポーネント(HTTP リクエスト処理メソッド、ビジネスサービスなど)は、メッセージ送信に従って、メッセージをブローカーリレーに送信して、サブスクライブされた WebSocket クライアントにメッセージをブロードキャストすることもできます。
実際、ブローカーリレーにより、堅牢でスケーラブルなメッセージブロードキャストが可能になります。