事件

透過實現 Spring 的 ApplicationListener 介面,可以釋出和接收多個 ApplicationContext 事件

  • 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 沒有響應。客戶端需要實現自己的重新連線邏輯。