对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

事件

多个 ApplicationContext 事件会被发布,可以通过实现 Spring 的 ApplicationListener 接口来接收这些事件:spring-doc.cadn.net.cn

  • BrokerAvailabilityEvent:指示代理(broker)变为可用或不可用的事件。 虽然“简单”代理在启动时立即变为可用,并且在应用程序运行期间始终保持可用状态,但 STOMP “代理中继”(broker relay)可能会与其功能完整的代理断开连接(例如,当代理被重启时)。该代理中继具有重连逻辑,当代理恢复后会重新建立与代理的“系统”连接。因此,每当连接状态在已连接与断开之间切换时,都会发布此事件。使用 SimpMessagingTemplate 的组件应订阅此事件,并在代理不可用时避免发送消息。无论如何,它们在发送消息时都应准备好处理 MessageDeliveryException 异常。spring-doc.cadn.net.cn

  • SessionConnectEvent:当接收到新的 STOMP CONNECT 请求时发布,用于表示新客户端会话的开始。该事件包含代表连接请求的消息,其中包含会话 ID、用户信息(如果有)以及客户端发送的任何自定义头信息。这对于跟踪客户端会话非常有用。订阅此事件的组件可以使用 SimpMessageHeaderAccessorStompMessageHeaderAccessor 对所包含的消息进行封装。spring-doc.cadn.net.cn

  • SessionConnectedEvent:在代理(broker)响应 CONNECT 请求并发送了 STOMP CONNECTED 帧之后,紧接着 SessionConnectEvent 发布。此时,STOMP 会话可被视为已完全建立。spring-doc.cadn.net.cn

  • SessionSubscribeEvent:当接收到新的 STOMP SUBSCRIBE 时发布。spring-doc.cadn.net.cn

  • SessionUnsubscribeEvent:在收到新的 STOMP UNSUBSCRIBE 请求时发布。spring-doc.cadn.net.cn

  • SessionDisconnectEvent:当 STOMP 会话结束时发布。DISCONNECT 可能由客户端发送,也可能在 WebSocket 会话关闭时自动生成。在某些情况下,每个会话可能会多次发布此事件。组件在处理多次断开连接事件时应具有幂等性。spring-doc.cadn.net.cn

当你使用功能完整的代理(broker)时,如果代理暂时不可用,STOMP“代理中继”(broker relay)会自动重新连接“系统”连接。然而,客户端连接不会自动重新连接。假设启用了心跳机制,客户端通常会在10秒内检测到代理无响应。客户端需要自行实现重连逻辑。