イベント

ApplicationContext のいくつかのイベントが公開されており、Spring の ApplicationListener インターフェースを実装することで受信できます。

  • BrokerAvailabilityEvent: ブローカーが使用可能または使用不可になるときを示します。「単純な」ブローカーは起動時にすぐに利用可能になり、アプリケーションの実行中はそのままになりますが、STOMP「ブローカーリレー」はフル機能のブローカーへの接続を失う可能性があります(たとえば、ブローカーを再起動した場合)。ブローカーリレーには再接続ロジックがあり、ブローカーが戻ったときにブローカーへの「システム」接続を再確立します。その結果、このイベントは、状態が接続状態から切断状態に、またはその逆に変化するたびに公開されます。SimpMessagingTemplate を使用するコンポーネントは、このイベントをサブスクライブし、ブローカーが利用できないときにメッセージを送信しないようにする必要があります。いずれの場合でも、メッセージを送信するときに MessageDeliveryException を処理する準備が必要です。

  • SessionConnectEvent: 新しいクライアントセッションの開始を示す新しい STOMP CONNECT を受信したときに公開されます。イベントには、セッション ID、ユーザー情報(存在する場合)、クライアントが送信したカスタムヘッダーなど、接続を表すメッセージが含まれます。これは、クライアントセッションの追跡に役立ちます。このイベントにサブスクライブされたコンポーネントは、含まれるメッセージを SimpMessageHeaderAccessor または StompMessageHeaderAccessor でラップできます。

  • SessionConnectedEvent: ブローカーが CONNECT へのレスポンスとして STOMP CONNECTED フレームを送信したときに、SessionConnectEvent の直後に公開されました。この時点で、STOMP セッションは完全に確立されたと見なすことができます。

  • SessionSubscribeEvent: 新しい STOMP SUBSCRIBE が受信されたときに公開されます。

  • SessionUnsubscribeEvent: 新しい STOMP UNSUBSCRIBE が受信されたときに公開されます。

  • SessionDisconnectEvent: STOMP セッションが終了すると公開されます。DISCONNECT はクライアントから送信された可能性があります。または、WebSocket セッションが閉じられたときに自動的に生成された可能性があります。場合によっては、このイベントはセッションごとに複数回発行されます。コンポーネントは、複数の切断イベントに関してべき等である必要があります。

フル機能のブローカーを使用する場合、ブローカーが一時的に利用できなくなると、STOMP「ブローカーリレー」が自動的に「システム」接続を再接続します。ただし、クライアント接続は自動的に再接続されません。ハートビートが有効になっていると仮定すると、クライアントは通常、ブローカーが 10 秒以内に応答しないことに気付きます。クライアントは、独自の再接続ロジックを実装する必要があります。