RabbitMQブローカーを使用してクラスタ化されたTomcat環境でSpring Websocketを使用してアプリケーションを構築しています。私は聞くエンドポイントを登録する必要があるAPIモジュールを持っています。私は、通常の例に続き、この設定を思い付いた:これは動作しますが、そのためできない他の層を残して、すべてのAPIモジュールにバンドルされているのWebSocketとリレー設定を表示されるアプリケーションの他のレイヤーからSTOMPメッセージを送信する
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer
{
@Override
public void configureMessageBroker(final MessageBrokerRegistry config)
{
config.enableStompBrokerRelay("/topic/")
.setRelayHost("localhost")
.setRelayPort(61613)
.setClientLogin("guest")
.setClientPasscode("guest");
}
@Override
public void registerStompEndpoints(final StompEndpointRegistry registry)
{
registry.addEndpoint("/updates")
.setAllowedOrigins("*")
.withSockJS();
}
}
が、それは私の問題を解決しませんブローカーを再利用する。私たちのアプリの他のモジュールがRabbitMQのトピックにメッセージをプッシュできるように、サービス層でストップメッセージブローカリレー設定が必要になり、開いて開いているWebソケットをすべて更新するAPIモジュールに通知します。
以下は、アプリケーションの関連するレイヤーのサンプルダイアグラムと、私が達成しようとしているものです。私はモジュール「Cron Message Sender」が他のAPIモジュールを通してメッセージトピックに加入しているすべての人にメッセージをプッシュできるようにする必要があります。
私は右模索しています他の可能性のあるアイデア2つを完全に別々のコンポーネントに分割することです。これは、各APIモジュールが、単純なブローカー(リレーなし)を使用して独自のWebSocket構成を実行することを意味しています。その後、サービス層では、AMQPを介してrabbitmqと直接話し合って、各サービスインスタンスを接続します。次に、各APIモジュールは着信AMQPメッセージをリッスンし、Stomp WS経由でそれぞれのユーザーに転送します。私はまだメッセージングを初めて学んでおり、これが実稼働環境でのパフォーマンスの点でより良いか悪いかはわかりません。 –
このアプローチがうまくいくとすれば、RabbitMQからAWS SQSのような他のメッセージブローカーに移行することに決めれば、コンポーネントのデカップリングが可能になり、柔軟性を高めることができます。 –