事件

發布了幾個 ApplicationContext 事件,可以透過實作 Spring 的 ApplicationListener 介面來接收

  • BrokerAvailabilityEvent:指示 Broker 何時可用或不可用。「簡單」Broker 在啟動時立即可用,並在應用程式執行時保持可用,而 STOMP「Broker 中繼」可能會遺失其與完整功能 Broker 的連線(例如,如果 Broker 重新啟動)。Broker 中繼具有重新連線邏輯,並在 Broker 回來時重新建立與 Broker 的「系統」連線。因此,每當狀態從已連線變更為已斷線以及反之亦然時,就會發布此事件。使用 SimpMessagingTemplate 的組件應訂閱此事件,並避免在 Broker 不可用時傳送訊息。在任何情況下,它們都應該準備好在傳送訊息時處理 MessageDeliveryException

  • SessionConnectEvent:當收到新的 STOMP CONNECT 時發布,以指示新客户端會話的開始。該事件包含表示連線的訊息,包括會話 ID、使用者資訊(如果有的話)以及客户端傳送的任何自訂標頭。這對於追蹤客户端會話很有用。訂閱此事件的組件可以使用 SimpMessageHeaderAccessorStompMessageHeaderAccessor 包裝包含的訊息。

  • SessionConnectedEvent:在 SessionConnectEvent 之後不久發布,當 Broker 已傳送 STOMP CONNECTED 框架以回應 CONNECT 時。此時,STOMP 會話可以視為已完全建立。

  • SessionSubscribeEvent:當收到新的 STOMP SUBSCRIBE 時發布。

  • SessionUnsubscribeEvent:當收到新的 STOMP UNSUBSCRIBE 時發布。

  • SessionDisconnectEvent:當 STOMP 會話結束時發布。DISCONNECT 可能從客户端傳送,也可能在 WebSocket 會話關閉時自動產生。在某些情況下,每個會話會發布此事件多次。組件對於多個斷線事件應具有等冪性。

當您使用全功能 Broker 時,如果 Broker 暫時不可用,STOMP「Broker 中繼」會自動重新連線「系統」連線。但是,客户端連線不會自動重新連線。假設已啟用心跳訊號,客户端通常會在 10 秒內注意到 Broker 沒有回應。客户端需要實作自己的重新連線邏輯。