Class DefaultSubscriptionRegistry

java.lang.Object
org.springframework.messaging.simp.broker.AbstractSubscriptionRegistry
org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry
All Implemented Interfaces:
SubscriptionRegistry

public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry
Implementation of SubscriptionRegistry that stores subscriptions in memory and uses a PathMatcher for matching destinations.

As of 4.2, this class supports a selector header on subscription messages with Spring EL expressions evaluated against the headers to filter out messages in addition to destination matching.

Since:
4.0
Author:
Rossen Stoyanchev, Sebastien Deleuze, Juergen Hoeller, Sam Brannen
  • Field Details

    • DEFAULT_CACHE_LIMIT

      public static final int DEFAULT_CACHE_LIMIT
      Default maximum number of entries for the destination cache: 1024.
      See Also:
  • Constructor Details

    • DefaultSubscriptionRegistry

      public DefaultSubscriptionRegistry()
  • Method Details

    • setPathMatcher

      public void setPathMatcher(PathMatcher pathMatcher)
      Specify the PathMatcher to use.
    • getPathMatcher

      public PathMatcher getPathMatcher()
      Return the configured PathMatcher.
    • setCacheLimit

      public void setCacheLimit(int cacheLimit)
      Specify the maximum number of entries for the resolved destination cache. Default is 1024.
    • getCacheLimit

      public int getCacheLimit()
      Return the maximum number of entries for the resolved destination cache.
    • setSelectorHeaderName

      public void setSelectorHeaderName(@Nullable String selectorHeaderName)
      Configure the name of a header that a subscription message can have for the purpose of filtering messages matched to the subscription.

      The header value is expected to be a Spring Expression Language (SpEL) boolean expression to be applied to the headers of messages matched to the subscription.

      For example:

       headers.foo == 'bar'
       

      By default this is set to "selector". You can set it to a different name, or to null to turn off support for a selector header.

      Parameters:
      selectorHeaderName - the name to use for a selector header
      Since:
      4.2
    • getSelectorHeaderName

      @Nullable public String getSelectorHeaderName()
      Return the name of the selector header.
      Since:
      4.2
      See Also:
    • addSubscriptionInternal

      protected void addSubscriptionInternal(String sessionId, String subscriptionId, String destination, Message<?> message)
      Specified by:
      addSubscriptionInternal in class AbstractSubscriptionRegistry
    • removeSubscriptionInternal

      protected void removeSubscriptionInternal(String sessionId, String subscriptionId, Message<?> message)
      Specified by:
      removeSubscriptionInternal in class AbstractSubscriptionRegistry
    • unregisterAllSubscriptions

      public void unregisterAllSubscriptions(String sessionId)
      Description copied from interface: SubscriptionRegistry
      Remove all subscriptions associated with the given sessionId.
    • findSubscriptionsInternal

      protected MultiValueMap<String,String> findSubscriptionsInternal(String destination, Message<?> message)
      Specified by:
      findSubscriptionsInternal in class AbstractSubscriptionRegistry