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