ブローカーへの接続
STOMP ブローカーリレーは、ブローカーへの単一の「システム」TCP 接続を維持します。この接続は、サーバー側アプリケーションから発信されたメッセージにのみ使用され、メッセージの受信には使用されません。この接続の STOMP 資格情報(つまり、STOMP フレーム login
および passcode
ヘッダー)を構成できます。これは、XML 名前空間と Java 構成の両方で、guest
と guest
のデフォルト値を持つ systemLogin
と systemPasscode
プロパティとして公開されます。
STOMP ブローカーリレーは、接続された WebSocket クライアントごとに個別の TCP 接続も作成します。クライアントに代わって作成されるすべての TCP 接続に使用される STOMP 資格情報を構成できます。これは、XML 名前空間と Java 構成の両方で、guest
と guest
のデフォルト値を持つ clientLogin
と clientPasscode
プロパティとして公開されます。
STOMP ブローカーリレーは、クライアントに代わってブローカーに転送するすべての CONNECT フレームに、常に login および passcode ヘッダーを設定します。WebSocket クライアントはこれらのヘッダーを設定する必要はありません。それらは無視されます。認証セクションで説明しているように、WebSocket クライアントは、代わりに HTTP 認証に依存して WebSocket エンドポイントを保護し、クライアント ID を確立する必要があります。 |
STOMP ブローカーリレーは、「システム」TCP 接続を介してメッセージブローカーとの間でハートビートを送受信します。ハートビートを送信および受信する間隔を構成できます(デフォルトではそれぞれ 10 秒)。ブローカーへの接続が失われた場合、ブローカーリレーは、成功するまで 5 秒ごとに再接続を試行し続けます。
Spring Bean は、ApplicationListener<BrokerAvailabilityEvent>
を実装して、ブローカーへの「システム」接続が失われ、再確立されたときに通知を受信できます。例: 株価をブロードキャストする株価サービスは、アクティブな「システム」接続がない場合にメッセージの送信を停止できます。
デフォルトでは、STOMP ブローカーリレーは常に同じホストとポートに接続し、接続が失われた場合は必要に応じて再接続します。複数のアドレスを提供する場合、接続を試みるたびに、固定ホストとポートの代わりにアドレスのサプライヤーを構成できます。次の例は、その方法を示しています。
Java
Kotlin
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
// ...
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/queue/", "/topic/").setTcpClient(createTcpClient());
registry.setApplicationDestinationPrefixes("/app");
}
private ReactorNettyTcpClient<byte[]> createTcpClient() {
return new ReactorNettyTcpClient<>(
client -> client.remoteAddress(() -> new InetSocketAddress(0)),
new StompReactorNettyCodec());
}
}
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfiguration : WebSocketMessageBrokerConfigurer {
// ...
override fun configureMessageBroker(registry: MessageBrokerRegistry) {
registry.enableStompBrokerRelay("/queue/", "/topic/").setTcpClient(createTcpClient())
registry.setApplicationDestinationPrefixes("/app")
}
private fun createTcpClient(): ReactorNettyTcpClient<ByteArray> {
return ReactorNettyTcpClient({ it.addressSupplier { InetSocketAddress(0) } }, StompReactorNettyCodec())
}
}
virtualHost
プロパティを使用して STOMP ブローカーリレーを構成することもできます。このプロパティの値は、すべての CONNECT
フレームの host
ヘッダーとして設定されており、有用な場合があります(たとえば、TCP 接続が確立される実際のホストがクラウドベースの STOMP サービスを提供するホストと異なるクラウド環境で)。