跳到主要内容

事件

ChatGPT-4o-mini 中英对照 Events

多个 ApplicationContext 事件被发布,可以通过实现 Spring 的 ApplicationListener 接口来接收:

  • BrokerAvailabilityEvent: 表示代理何时变得可用或不可用。当“简单”代理在启动时立即可用并在应用程序运行时保持可用时,STOMP “代理中继”可能会失去与全功能代理的连接(例如,如果代理被重启)。代理中继具有重连逻辑,并在代理恢复时重新建立与“系统”的连接。因此,每当状态从连接变为断开连接或反之时,都会发布此事件。使用 SimpMessagingTemplate 的组件应订阅此事件,并避免在代理不可用时发送消息。在任何情况下,它们都应准备好在发送消息时处理 MessageDeliveryException

  • SessionConnectEvent: 当接收到新的 STOMP CONNECT 时发布,以指示新客户端会话的开始。该事件包含表示连接的消息,包括会话 ID、用户信息(如果有)和客户端发送的任何自定义头。这对于跟踪客户端会话非常有用。订阅此事件的组件可以使用 SimpMessageHeaderAccessorStompMessageHeaderAccessor 包装包含的消息。

  • SessionConnectedEvent: 在 SessionConnectEvent 之后不久发布,当代理已发送 STOMP CONNECTED 帧作为对 CONNECT 的响应时。在此时,STOMP 会话可以被认为是完全建立的。

  • SessionSubscribeEvent: 当接收到新的 STOMP SUBSCRIBE 时发布。

  • SessionUnsubscribeEvent: 当接收到新的 STOMP UNSUBSCRIBE 时发布。

  • SessionDisconnectEvent: 当 STOMP 会话结束时发布。DISCONNECT 可能是从客户端发送的,或者在 WebSocket 会话关闭时自动生成。在某些情况下,此事件在每个会话中可能会发布多次。组件应对多个断开事件保持幂等性。

备注

当您使用功能齐全的代理时,STOMP “代理中继”会在代理暂时不可用时自动重新连接“系统”连接。然而,客户端连接不会自动重新连接。假设启用了心跳,客户端通常会在 10 秒内注意到代理没有响应。客户端需要实现自己的重新连接逻辑。