|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
监控
当您使用 @EnableWebSocketMessageBroker 或 <websocket:message-broker> 时,关键基础设施组件会自动收集统计数据和计数器,这些数据和计数器可以提供有关应用程序内部状态的重要见解。该配置还声明了一个类型为 WebSocketMessageBrokerStats 的 Bean,该 Bean 会将所有可用信息集中在一起,并默认每隔 30 分钟在 INFO 级别记录一次。可以通过 Spring 的 MBeanExporter 将此 Bean 导出到 JMX 以在运行时查看(例如,通过 JDK 的 jconsole)。
以下列表总结了可用的信息:
- 客户端WebSocket会话
-
- 当前
-
表示当前有多少个客户端会话,进一步按 WebSocket 与 HTTP 流式传输和轮询 SockJS 会话进行细分。
- 总数
-
表示已建立的总会话数。
- 异常关闭
-
- 连接失败
-
会话在建立后但未在60秒内收到任何消息就被关闭。这通常是代理或网络问题的迹象。
- 发送限制已超出
-
会话在超过配置的发送超时时间或发送缓冲区限制后关闭,这可能发生在慢速客户端上(参见上一节)。
- 传输错误
-
会话在传输错误后关闭,例如无法读取或写入 WebSocket 连接或 HTTP 请求或响应。
- STOMP 帧
-
已处理的 CONNECT、CONNECTED 和 DISCONNECT 帧的总数,表示在 STOMP 层连接的客户端数量。请注意,当会话异常关闭或客户端未发送 DISCONNECT 帧就关闭时,DISCONNECT 的计数可能会较低。
- STOMP代理中继
-
- TCP 连接
-
指示通过客户端的WebSocket会话在代理上建立的TCP连接数量。这应该等于客户端WebSocket会话的数量加上一个额外的共享“系统”连接,用于从应用程序内部发送消息。
- STOMP 帧
-
客户端向代理发送或接收的CONNECT、CONNECTED和DISCONNECT帧的总数。请注意,无论客户端WebSocket会话如何关闭,都会向代理发送一个DISCONNECT帧。因此,DISCONNECT帧数量较低表明代理正在主动关闭连接(可能是由于心跳未及时到达、无效的输入帧或其他问题)。
- 客户端入站通道
-
来自支持
clientInboundChannel的线程池的统计数据,提供了有关传入消息处理健康状况的见解。在此排队的任务表明应用程序可能无法及时处理消息。如果存在 I/O 绑定的任务(例如,缓慢的数据库查询、对第三方 REST API 的 HTTP 请求等),请考虑增加线程池大小。 - 客户端出站通道
-
来自支持
clientOutboundChannel的线程池的统计信息,可提供有关向客户端广播消息健康状况的见解。在此排队的任务表明客户端消费消息的速度过慢。一种解决方法是增加线程池大小以适应预期的并发慢速客户端数量。另一种选择是减少发送超时时间和发送缓冲区大小限制(参见上一节)。 - SockJS 任务调度器
-
线程池的 SockJS 任务调度器生成的统计数据,用于发送心跳。请注意,当在 STOMP 层协商心跳时,SockJS 心跳将被禁用。