监控
当您使用@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代理中继
-
- TCP连接
-
指示代理上建立的客户端WebSocket会话的TCP连接数。这应该等于客户端WebSocket会话数 + 1个额外的共享“系统”连接,用于从应用程序内部发送消息。
- STOMP帧
-
转发到代理或从代理接收的CONNECT、CONNECTED和DISCONNECT帧的总数。请注意,无论客户端WebSocket会话如何关闭,都会向代理发送DISCONNECT帧。因此,较低的DISCONNECT帧计数表示代理主动关闭连接(可能是因为心跳未及时到达、无效的输入帧或其他问题)。
- 客户端入站通道
-
来自支持
clientInboundChannel
的线程池的统计信息,提供有关传入消息处理健康状况的见解。在这里排队的任务表明应用程序处理消息的速度可能太慢。如果存在I/O绑定任务(例如,慢速数据库查询、向第三方REST API发出的HTTP请求等),请考虑增加线程池大小。 - 客户端出站通道
-
来自支持
clientOutboundChannel
的线程池的统计信息,提供有关向客户端广播消息健康状况的见解。在这里排队的任务表明客户端处理消息的速度可能太慢。解决此问题的一种方法是增加线程池大小以容纳预期数量的并发慢速客户端。另一种选择是减少发送超时和发送缓冲区大小限制(请参阅前一节)。 - SockJS任务调度器
-
来自SockJS任务调度器线程池的统计信息,用于发送心跳。请注意,当在STOMP级别上协商心跳时,将禁用SockJS心跳。