Class AbstractBrokerMessageHandler
- All Implemented Interfaces:
- Aware,- ApplicationEventPublisherAware,- Lifecycle,- Phased,- SmartLifecycle,- MessageHandler
- Direct Known Subclasses:
- SimpleBrokerMessageHandler,- StompBrokerRelayMessageHandler
MessageHandler that broker messages to
 registered subscribers.- Since:
- 4.0
- Author:
- Rossen Stoyanchev
- 
Field SummaryFieldsFields inherited from interface org.springframework.context.SmartLifecycleDEFAULT_PHASE
- 
Constructor SummaryConstructorsConstructorDescriptionAbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel) Constructor with no destination prefixes (matches all destinations).AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel, @Nullable Collection<String> destinationPrefixes) Constructor with destination prefixes to match to destinations of messages.
- 
Method SummaryModifier and TypeMethodDescriptionprotected booleancheckDestinationPrefix(@Nullable String destination) Whether a message with the given destination should be processed.protected MessageChannelgetClientOutboundChannelForSession(String sessionId) Get the MessageChannel to use for sending messages to clients, possibly a per-session wrapper whenpreservePublishOrder=true.Return destination prefixes to use to filter messages to forward to the broker.intgetPhase()Return the phase that this lifecycle object is supposed to run in.voidhandleMessage(Message<?> message) Handle the given message.protected abstract voidhandleMessageInternal(Message<?> message) booleanReturnstrueif thisLifecyclecomponent should get started automatically by the container at the time that the containingApplicationContextgets refreshed.booleanWhether the message broker is currently available and able to process messages.booleanWhether to ensure messages are received in the order of publication.final booleanCheck whether this message handler is currently running.protected voidprotected voidvoidSet the ApplicationEventPublisher that this object runs in.voidsetAutoStartup(boolean autoStartup) voidsetPhase(int phase) Set the phase that this handler should run in.voidsetPreservePublishOrder(boolean preservePublishOrder) Whether the client must receive messages in the order of publication.voidsetUserDestinationPredicate(@Nullable Predicate<String> predicate) Configure a Predicate to identify messages with a user destination.voidstart()Start this component.protected voidvoidstop()Stop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method.final voidIndicates that a Lifecycle component must stop if it is currently running.protected void
- 
Field Details- 
loggerprotected final org.apache.commons.logging.Log logger
 
- 
- 
Constructor Details- 
AbstractBrokerMessageHandlerpublic AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel) Constructor with no destination prefixes (matches all destinations).- Parameters:
- inboundChannel- the channel for receiving messages from clients (for example, WebSocket clients)
- outboundChannel- the channel for sending messages to clients (for example, WebSocket clients)
- brokerChannel- the channel for the application to send messages to the broker
 
- 
AbstractBrokerMessageHandlerpublic AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel, @Nullable Collection<String> destinationPrefixes) Constructor with destination prefixes to match to destinations of messages.- Parameters:
- inboundChannel- the channel for receiving messages from clients (for example, WebSocket clients)
- outboundChannel- the channel for sending messages to clients (for example, WebSocket clients)
- brokerChannel- the channel for the application to send messages to the broker
- destinationPrefixes- prefixes to use to filter out messages
 
 
- 
- 
Method Details- 
getClientInboundChannel
- 
getClientOutboundChannel
- 
getBrokerChannel
- 
getDestinationPrefixesReturn destination prefixes to use to filter messages to forward to the broker. Messages that have a destination and where the destination doesn't match are ignored.By default this is not set. 
- 
setUserDestinationPredicateConfigure a Predicate to identify messages with a user destination. When nodestination prefixesare configured, this helps to recognize and skip user destination messages that need to be pre-processed by theUserDestinationMessageHandlerbefore they reach the broker.- Parameters:
- predicate- the predicate to identify user messages with a non-null destination as messages with a user destinations.
- Since:
- 5.3.4
 
- 
setPreservePublishOrderpublic void setPreservePublishOrder(boolean preservePublishOrder) Whether the client must receive messages in the order of publication.By default messages sent to the "clientOutboundChannel"may not be processed in the same order because the channel is backed by a ThreadPoolExecutor that in turn does not guarantee processing in order.When this flag is set to truemessages within the same session will be sent to the"clientOutboundChannel"one at a time in order to preserve the order of publication.- Parameters:
- preservePublishOrder- whether to publish in order
- Since:
- 5.1
 
- 
isPreservePublishOrderpublic boolean isPreservePublishOrder()Whether to ensure messages are received in the order of publication.- Since:
- 5.1
 
- 
setApplicationEventPublisherDescription copied from interface:ApplicationEventPublisherAwareSet the ApplicationEventPublisher that this object runs in.Invoked after population of normal bean properties but before an init callback like InitializingBean's afterPropertiesSet or a custom init-method. Invoked before ApplicationContextAware's setApplicationContext. - Specified by:
- setApplicationEventPublisherin interface- ApplicationEventPublisherAware
- Parameters:
- publisher- event publisher to be used by this object
 
- 
getApplicationEventPublisher
- 
setAutoStartuppublic void setAutoStartup(boolean autoStartup) 
- 
isAutoStartuppublic boolean isAutoStartup()Description copied from interface:SmartLifecycleReturnstrueif thisLifecyclecomponent should get started automatically by the container at the time that the containingApplicationContextgets refreshed.A value of falseindicates that the component is intended to be started through an explicitLifecycle.start()call instead, analogous to a plainLifecycleimplementation.The default implementation returns true.- Specified by:
- isAutoStartupin interface- SmartLifecycle
- See Also:
 
- 
setPhasepublic void setPhase(int phase) Set the phase that this handler should run in.By default, this is SmartLifecycle.DEFAULT_PHASE, but with@EnableWebSocketMessageBrokerconfiguration it is set to 0.- Since:
- 6.1.4
 
- 
getPhasepublic int getPhase()Description copied from interface:SmartLifecycleReturn the phase that this lifecycle object is supposed to run in.The default implementation returns SmartLifecycle.DEFAULT_PHASEin order to letstop()callbacks execute before regularLifecycleimplementations.- Specified by:
- getPhasein interface- Phased
- Specified by:
- getPhasein interface- SmartLifecycle
- See Also:
 
- 
startpublic void start()Description copied from interface:LifecycleStart this component.Should not throw an exception if the component is already running. In the case of a container, this will propagate a hard start signal to all components that apply, even to non-auto-startup components. 
- 
startInternalprotected void startInternal()
- 
stoppublic void stop()Description copied from interface:LifecycleStop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method. Consider implementingSmartLifecycleand itsstop(Runnable)variant when asynchronous stop behavior is necessary.Note that this stop notification is not guaranteed to come before destruction: On regular shutdown, Lifecyclebeans will first receive a stop notification before the general destruction callbacks are being propagated; however, on hot refresh during a context's lifetime or on aborted refresh attempts, a given bean's destroy method will be called without any consideration of stop signals upfront.Should not throw an exception if the component is not running (not started yet). In the case of a container, this will propagate the stop signal to all components that apply. 
- 
stopInternalprotected void stopInternal()
- 
stopDescription copied from interface:SmartLifecycleIndicates that a Lifecycle component must stop if it is currently running.The provided callback is used by the LifecycleProcessorto support an ordered, and potentially concurrent, shutdown of all components having a common shutdown order value. The callback must be executed after theSmartLifecyclecomponent does indeed stop.The LifecycleProcessorwill call only this variant of thestopmethod; i.e.Lifecycle.stop()will not be called forSmartLifecycleimplementations unless explicitly delegated to within the implementation of this method.The default implementation delegates to Lifecycle.stop()and immediately triggers the given callback in the calling thread. Note that there is no synchronization between the two, so custom implementations may at least want to put the same steps within their common lifecycle monitor (if any).- Specified by:
- stopin interface- SmartLifecycle
- See Also:
 
- 
isRunningpublic final boolean isRunning()Check whether this message handler is currently running.Note that even when this message handler is running the isBrokerAvailable()flag may still independently alternate between being on and off depending on the concrete subclass implementation.
- 
isBrokerAvailablepublic boolean isBrokerAvailable()Whether the message broker is currently available and able to process messages.Note that this is in addition to the isRunning()flag, which indicates whether this message handler is running. In other words the message handler must first be running and then the#isBrokerAvailable()flag may still independently alternate between being on and off depending on the concrete subclass implementation.Application components may implement org.springframework.context.ApplicationListener<BrokerAvailabilityEvent>to receive notifications when broker becomes available and unavailable.
- 
handleMessageDescription copied from interface:MessageHandlerHandle the given message.- Specified by:
- handleMessagein interface- MessageHandler
- Parameters:
- message- the message to be handled
 
- 
handleMessageInternal
- 
checkDestinationPrefixWhether a message with the given destination should be processed. This is the case if one of the following conditions is true:- The destination starts with one of the configured
 destination prefixes.
- No prefixes are configured and the destination isn't matched
 by the userDestinationPredicate.
- The message has no destination.
 - Parameters:
- destination- the destination to check
- Returns:
- whether to process (true) or skip (false) the destination
 
- The destination starts with one of the configured
 
- 
publishBrokerAvailableEventprotected void publishBrokerAvailableEvent()
- 
getClientOutboundChannelForSessionGet the MessageChannel to use for sending messages to clients, possibly a per-session wrapper whenpreservePublishOrder=true.- Since:
- 5.1
 
 
-