事件
發布了幾個 ApplicationContext
事件,可以透過實作 Spring 的 ApplicationListener
介面來接收
-
BrokerAvailabilityEvent
:指示 Broker 何時可用或不可用。「簡單」Broker 在啟動時立即可用,並在應用程式執行時保持可用,而 STOMP「Broker 中繼」可能會遺失其與完整功能 Broker 的連線(例如,如果 Broker 重新啟動)。Broker 中繼具有重新連線邏輯,並在 Broker 回來時重新建立與 Broker 的「系統」連線。因此,每當狀態從已連線變更為已斷線以及反之亦然時,就會發布此事件。使用SimpMessagingTemplate
的組件應訂閱此事件,並避免在 Broker 不可用時傳送訊息。在任何情況下,它們都應該準備好在傳送訊息時處理MessageDeliveryException
。 -
SessionConnectEvent
:當收到新的 STOMP CONNECT 時發布,以指示新客户端會話的開始。該事件包含表示連線的訊息,包括會話 ID、使用者資訊(如果有的話)以及客户端傳送的任何自訂標頭。這對於追蹤客户端會話很有用。訂閱此事件的組件可以使用SimpMessageHeaderAccessor
或StompMessageHeaderAccessor
包裝包含的訊息。 -
SessionConnectedEvent
:在SessionConnectEvent
之後不久發布,當 Broker 已傳送 STOMP CONNECTED 框架以回應 CONNECT 時。此時,STOMP 會話可以視為已完全建立。 -
SessionSubscribeEvent
:當收到新的 STOMP SUBSCRIBE 時發布。 -
SessionUnsubscribeEvent
:當收到新的 STOMP UNSUBSCRIBE 時發布。 -
SessionDisconnectEvent
:當 STOMP 會話結束時發布。DISCONNECT 可能從客户端傳送,也可能在 WebSocket 會話關閉時自動產生。在某些情況下,每個會話會發布此事件多次。組件對於多個斷線事件應具有等冪性。
當您使用全功能 Broker 時,如果 Broker 暫時不可用,STOMP「Broker 中繼」會自動重新連線「系統」連線。但是,客户端連線不會自動重新連線。假設已啟用心跳訊號,客户端通常會在 10 秒內注意到 Broker 沒有回應。客户端需要實作自己的重新連線邏輯。 |