监控

当您使用 @EnableWebSocketMessageBroker<websocket:message-broker> 时,关键基础设施组件会自动收集统计数据和计数器,这些数据和计数器提供了对应用程序内部状态的重要洞察。该配置还会声明一个类型为 WebSocketMessageBrokerStats 的 bean,该 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 心跳会被禁用。

© . This site is unofficial and not affiliated with VMware.