監控

當您使用 @EnableWebSocketMessageBroker<websocket:message-broker> 時,主要的基礎架構元件會自動收集統計資料和計數器,以提供對應用程式內部狀態的重要洞察。此組態也會宣告一個 WebSocketMessageBrokerStats 類型的 Bean,它會將所有可用的資訊收集在一個地方,並預設每 30 分鐘以 INFO 層級記錄一次。此 Bean 可以透過 Spring 的 MBeanExporter 匯出到 JMX,以便在執行階段檢視(例如,透過 JDK 的 jconsole)。以下列表摘要說明可用的資訊

用戶端 WebSocket 工作階段
目前

指示目前有多少用戶端工作階段,並依 WebSocket 與 HTTP 串流和輪詢 SockJS 工作階段進一步細分計數。

總計

指示已建立的工作階段總數。

異常關閉
連線失敗

已建立但於 60 秒內未收到任何訊息後關閉的工作階段。這通常表示 Proxy 或網路問題。

超出傳送限制

在超出組態的傳送逾時或傳送緩衝區限制後關閉的工作階段,這可能會發生在速度較慢的用戶端上(請參閱上一節)。

傳輸錯誤

在發生傳輸錯誤後關閉的工作階段,例如無法讀取或寫入 WebSocket 連線或 HTTP 請求或回應。

STOMP 框架

已處理的 CONNECT、CONNECTED 和 DISCONNECT 框架總數,指示在 STOMP 層級連線的用戶端數量。請注意,當工作階段異常關閉或用戶端在未傳送 DISCONNECT 框架的情況下關閉時,DISCONNECT 計數可能會較低。

STOMP Broker Relay
TCP 連線

指示代表用戶端 WebSocket 工作階段與 Broker 建立的 TCP 連線數。這應等於用戶端 WebSocket 工作階段的數量 + 1 個額外的共用「系統」連線,用於從應用程式內傳送訊息。

STOMP 框架

代表用戶端轉發或從 Broker 接收的 CONNECT、CONNECTED 和 DISCONNECT 框架總數。請注意,無論用戶端 WebSocket 工作階段如何關閉,都會將 DISCONNECT 框架傳送至 Broker。因此,較低的 DISCONNECT 框架計數表示 Broker 主動關閉連線(可能是因為心跳訊號未及時到達、輸入框架無效或其他問題)。

用戶端入站通道

來自支援 clientInboundChannel 的執行緒池的統計資料,可深入了解傳入訊息處理的健康狀況。此處排隊的工作表示應用程式可能太慢而無法處理訊息。如果存在 I/O 繫結工作(例如,緩慢的資料庫查詢、對第三方 REST API 的 HTTP 請求等等),請考慮增加執行緒池大小。

用戶端出站通道

來自支援 clientOutboundChannel 的執行緒池的統計資料,可深入了解將訊息廣播至用戶端的健康狀況。此處排隊的工作表示用戶端消耗訊息的速度太慢。解決此問題的一種方法是增加執行緒池大小,以容納預期的並行慢速用戶端數量。另一種選擇是減少傳送逾時和傳送緩衝區大小限制(請參閱上一節)。

SockJS 工作排程器

來自 SockJS 工作排程器執行緒池的統計資料,該排程器用於傳送心跳訊號。請注意,當在 STOMP 層級協商心跳訊號時,SockJS 心跳訊號會停用。