事件

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

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

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

  • SessionConnectedEvent: 在 SessionConnectEvent 之后不久发布,此时 Broker 已发送 STOMP CONNECTED 帧以响应 CONNECT。此时,STOMP 会话可以被视为完全建立。

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

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

  • SessionDisconnectEvent: 当 STOMP 会话结束时发布。DISCONNECT 可能由客户端发送,或者在 WebSocket 会话关闭时自动生成。在某些情况下,此事件在一个会话中会发布多次。组件应针对多个断开连接事件具有幂等性。

当您使用功能齐全的 Broker 时,如果 Broker 暂时不可用,STOMP “Broker Relay” 会自动重新连接“系统”连接。但是,客户端连接不会自动重新连接。假设心跳已启用,客户端通常会在 10 秒内注意到 Broker 没有响应。客户端需要实现自己的重新连接逻辑。
© . This site is unofficial and not affiliated with VMware.