|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
事件
多个 ApplicationContext 事件会被发布,可以通过实现 Spring 的 ApplicationListener 接口来接收这些事件:
-
BrokerAvailabilityEvent:指示代理(broker)变为可用或不可用的事件。 虽然“简单”代理在启动时立即变为可用,并且在应用程序运行期间始终保持可用状态,但 STOMP “代理中继”(broker relay)可能会与其功能完整的代理断开连接(例如,当代理被重启时)。该代理中继具有重连逻辑,当代理恢复后会重新建立与代理的“系统”连接。因此,每当连接状态在已连接与断开之间切换时,都会发布此事件。使用SimpMessagingTemplate的组件应订阅此事件,并在代理不可用时避免发送消息。无论如何,它们在发送消息时都应准备好处理MessageDeliveryException异常。 -
SessionConnectEvent:当接收到新的 STOMP CONNECT 请求时发布,用于表示新客户端会话的开始。该事件包含代表连接请求的消息,其中包含会话 ID、用户信息(如果有)以及客户端发送的任何自定义头信息。这对于跟踪客户端会话非常有用。订阅此事件的组件可以使用SimpMessageHeaderAccessor或StompMessageHeaderAccessor对所包含的消息进行封装。 -
SessionConnectedEvent:在代理(broker)响应 CONNECT 请求并发送了 STOMP CONNECTED 帧之后,紧接着SessionConnectEvent发布。此时,STOMP 会话可被视为已完全建立。 -
SessionSubscribeEvent:当接收到新的 STOMP SUBSCRIBE 时发布。 -
SessionUnsubscribeEvent:在收到新的 STOMP UNSUBSCRIBE 请求时发布。 -
SessionDisconnectEvent:当 STOMP 会话结束时发布。DISCONNECT 可能由客户端发送,也可能在 WebSocket 会话关闭时自动生成。在某些情况下,每个会话可能会多次发布此事件。组件在处理多次断开连接事件时应具有幂等性。
| 当你使用功能完整的代理(broker)时,如果代理暂时不可用,STOMP“代理中继”(broker relay)会自动重新连接“系统”连接。然而,客户端连接不会自动重新连接。假设启用了心跳机制,客户端通常会在10秒内检测到代理无响应。客户端需要自行实现重连逻辑。 |