事件
发布了多个 ApplicationContext
事件,并且可以通过实现 Spring 的 ApplicationListener
接口来接收这些事件。
-
BrokerAvailabilityEvent
:指示代理何时可用或不可用。“简单”代理在启动时立即可用,并在应用程序运行期间保持可用状态,而 STOMP “代理中继”可能会失去与完整功能代理的连接(例如,如果代理重新启动)。代理中继具有重新连接逻辑,并在代理恢复时重新建立与代理的“系统”连接。因此,每当状态从已连接更改为已断开连接,反之亦然时,都会发布此事件。使用SimpMessagingTemplate
的组件应订阅此事件,并在代理不可用时避免发送消息。无论如何,它们都应该准备好处理发送消息时的MessageDeliveryException
。 -
SessionConnectEvent
:在接收到新的 STOMP CONNECT 时发布,以指示新客户端会话的开始。该事件包含表示连接的消息,包括会话 ID、用户信息(如果有)以及客户端发送的任何自定义标头。这对于跟踪客户端会话很有用。订阅此事件的组件可以使用SimpMessageHeaderAccessor
或StompMessageHeaderAccessor
包装包含的消息。 -
SessionConnectedEvent
:在代理发送 STOMP CONNECTED 帧以响应 CONNECT 后不久发布SessionConnectEvent
。此时,可以认为 STOMP 会话已完全建立。 -
SessionSubscribeEvent
:在接收到新的 STOMP SUBSCRIBE 时发布。 -
SessionUnsubscribeEvent
:在接收到新的 STOMP UNSUBSCRIBE 时发布。 -
SessionDisconnectEvent
:在 STOMP 会话结束时发布。DISCONNECT 可能是由客户端发送的,也可能是 WebSocket 会话关闭时自动生成的。在某些情况下,此事件会为每个会话发布多次。组件应该对多个断开连接事件具有幂等性。
当您使用功能齐全的代理时,如果代理暂时不可用,STOMP “代理中继”会自动重新连接“系统”连接。但是,客户端连接不会自动重新连接。假设启用了心跳,客户端通常会在 10 秒内注意到代理没有响应。客户端需要实现自己的重新连接逻辑。 |