監控

當您使用 @EnableWebSocketMessageBroker<websocket:message-broker> 時,關鍵基礎設施元件會自動收集統計資訊和計數器,這些資訊提供了關於應用程式內部狀態的重要洞察。該配置還聲明瞭一個 WebSocketMessageBrokerStats 型別的 bean,它將所有可用資訊彙集到一處,並且預設每 30 分鐘以 INFO 級別記錄一次。此 bean 可以透過 Spring 的 MBeanExporter 匯出到 JMX,以便在執行時檢視(例如,透過 JDK 的 jconsole)。以下列表總結了可用的資訊:

客戶端 WebSocket 會話
當前

指示當前有多少客戶端會話,計數進一步細分為 WebSocket 會話與 HTTP 流式和輪詢 SockJS 會話。

總計

指示已建立的總會話數。

異常關閉
連線失敗

已建立但 60 秒內未收到任何訊息後關閉的會話。這通常表示代理或網路問題。

傳送限制超出

因超出配置的傳送超時或傳送緩衝區限制而關閉的會話,這可能發生在慢速客戶端上(參見上一節)。

傳輸錯誤

因傳輸錯誤(例如,無法讀取或寫入 WebSocket 連線或 HTTP 請求/響應)而關閉的會話。

STOMP 幀

已處理的 CONNECT、CONNECTED 和 DISCONNECT 幀的總數,指示在 STOMP 級別連線的客戶端數量。請注意,當會話異常關閉或客戶端未傳送 DISCONNECT 幀就關閉時,DISCONNECT 計數可能較低。

STOMP Broker Relay
TCP 連線

指示代表客戶端 WebSocket 會話連線到 broker 的 TCP 連線數。這應該等於客戶端 WebSocket 會話數加上 1 個額外的共享“系統”連線,用於從應用程式內部發送訊息。

STOMP 幀

代表客戶端轉發到 broker 或從 broker 收到的 CONNECT、CONNECTED 和 DISCONNECT 幀的總數。請注意,無論客戶端 WebSocket 會話如何關閉,都會向 broker 傳送 DISCONNECT 幀。因此,較低的 DISCONNECT 幀計數表明 broker 主動關閉連線(可能是因為心跳未及時到達、無效的輸入幀或其他問題)。

客戶端入站通道

來自支援 clientInboundChannel 的執行緒池的統計資訊,提供了關於入站訊息處理健康狀況的洞察。此處排隊的任務表明應用程式處理訊息可能太慢。如果存在 I/O 密集型任務(例如,慢速資料庫查詢、對第三方 REST API 的 HTTP 請求等),請考慮增加執行緒池大小。

客戶端出站通道

來自支援 clientOutboundChannel 的執行緒池的統計資訊,提供了關於向客戶端廣播訊息健康狀況的洞察。此處排隊的任務表明客戶端消費訊息太慢。解決此問題的一種方法是增加執行緒池大小以適應預期的併發慢速客戶端數量。另一種選擇是減小發送超時和傳送緩衝區大小限制(參見上一節)。

SockJS 任務排程器

來自 SockJS 任務排程器執行緒池的統計資訊,用於傳送心跳。請注意,當心跳在 STOMP 級別協商時,SockJS 心跳會被停用。