跳到主要内容

监控

ChatGPT-4o-mini 中英对照 Monitoring

当你使用 @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 会话与代理建立的 TCP 连接数量。这应该等于客户端 WebSocket 会话的数量 + 1 个额外的共享“系统”连接,用于从应用程序内部发送消息。

STOMP 帧

转发给代理或从代理接收的 CONNECT、CONNECTED 和 DISCONNECT 帧的总数。请注意,无论客户端 WebSocket 会话是如何关闭的,都会向代理发送 DISCONNECT 帧。因此,较低的 DISCONNECT 帧计数表明代理正在主动关闭连接(可能是因为心跳未及时到达、无效的输入帧或其他问题)。

客户入站渠道

来自支持 clientInboundChannel 的线程池的统计信息,提供了对传入消息处理健康状况的洞察。这里排队的任务表明应用程序可能处理消息的速度过慢。如果存在 I/O 绑定任务(例如,缓慢的数据库查询、对第三方 REST API 的 HTTP 请求等),考虑增加线程池的大小。

客户外部渠道

来自支持 clientOutboundChannel 的线程池的统计信息,提供了有关向客户端广播消息健康状况的洞察。这里排队的任务表明客户端消费消息的速度太慢。解决此问题的一种方法是增加线程池的大小,以适应预期的并发慢客户端数量。另一种选择是减少发送超时和发送缓冲区大小限制(见前一节)。

SockJS 任务调度器

SockJS 任务调度器的线程池统计信息,用于发送心跳。请注意,当在 STOMP 层面上协商心跳时,SockJS 心跳被禁用。