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.

This class also supports an optional selector header on subscription messages with Spring Expression Language (SpEL) expressions evaluated against the headers to filter out messages in addition to destination matching. As of Spring Framework 6.1, the SpEL support is disabled by default, but it can be enabled by setting a selector header name.

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 the selector header name is set to null which disables this feature. You can set it to "selector" or a different name to enable support for a selector header.

      Parameters:
      selectorHeaderName - the name to use for a selector header, or null or blank to disable selector header support
      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