public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry
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.
Modifier and Type | Class and Description |
---|---|
private class |
DefaultSubscriptionRegistry.DestinationCache
A cache for destinations previously resolved via
findSubscriptionsInternal(String, Message) |
private static class |
DefaultSubscriptionRegistry.SessionSubscriptionInfo
Hold subscriptions for a session.
|
private static class |
DefaultSubscriptionRegistry.SessionSubscriptionRegistry
Provide access to session subscriptions by sessionId.
|
private static class |
DefaultSubscriptionRegistry.SimpMessageHeaderPropertyAccessor |
private static class |
DefaultSubscriptionRegistry.Subscription |
Modifier and Type | Field and Description |
---|---|
private int |
cacheLimit |
static int |
DEFAULT_CACHE_LIMIT
Default maximum number of entries for the destination cache: 1024
|
private DefaultSubscriptionRegistry.DestinationCache |
destinationCache |
private ExpressionParser |
expressionParser |
private PathMatcher |
pathMatcher |
private boolean |
selectorHeaderInUse |
private java.lang.String |
selectorHeaderName |
private DefaultSubscriptionRegistry.SessionSubscriptionRegistry |
subscriptionRegistry |
logger
Constructor and Description |
---|
DefaultSubscriptionRegistry() |
Modifier and Type | Method and Description |
---|---|
protected void |
addSubscriptionInternal(java.lang.String sessionId,
java.lang.String subsId,
java.lang.String destination,
Message<?> message) |
private MultiValueMap<java.lang.String,java.lang.String> |
filterSubscriptions(MultiValueMap<java.lang.String,java.lang.String> allMatches,
Message<?> message) |
protected MultiValueMap<java.lang.String,java.lang.String> |
findSubscriptionsInternal(java.lang.String destination,
Message<?> message) |
int |
getCacheLimit()
Return the maximum number of entries for the resolved destination cache.
|
PathMatcher |
getPathMatcher()
Return the configured
PathMatcher . |
java.lang.String |
getSelectorHeaderName()
Return the name for the selector header.
|
protected void |
removeSubscriptionInternal(java.lang.String sessionId,
java.lang.String subsId,
Message<?> message) |
void |
setCacheLimit(int cacheLimit)
Specify the maximum number of entries for the resolved destination cache.
|
void |
setPathMatcher(PathMatcher pathMatcher)
Specify the
PathMatcher to use. |
void |
setSelectorHeaderName(java.lang.String selectorHeaderName)
Configure the name of a selector header that a subscription message can
have in order to filter messages based on their headers.
|
java.lang.String |
toString() |
void |
unregisterAllSubscriptions(java.lang.String sessionId)
Remove all subscriptions associated with the given sessionId.
|
findSubscriptions, registerSubscription, unregisterSubscription
public static final int DEFAULT_CACHE_LIMIT
private PathMatcher pathMatcher
private volatile int cacheLimit
private java.lang.String selectorHeaderName
private volatile boolean selectorHeaderInUse
private final ExpressionParser expressionParser
private final DefaultSubscriptionRegistry.DestinationCache destinationCache
private final DefaultSubscriptionRegistry.SessionSubscriptionRegistry subscriptionRegistry
public void setPathMatcher(PathMatcher pathMatcher)
PathMatcher
to use.public PathMatcher getPathMatcher()
PathMatcher
.public void setCacheLimit(int cacheLimit)
public int getCacheLimit()
public void setSelectorHeaderName(java.lang.String selectorHeaderName)
For example the following expression expects a header called "foo" to have the value "bar":
headers.foo == 'bar'
By default this is set to "selector".
public java.lang.String getSelectorHeaderName()
protected void addSubscriptionInternal(java.lang.String sessionId, java.lang.String subsId, java.lang.String destination, Message<?> message)
addSubscriptionInternal
in class AbstractSubscriptionRegistry
protected void removeSubscriptionInternal(java.lang.String sessionId, java.lang.String subsId, Message<?> message)
removeSubscriptionInternal
in class AbstractSubscriptionRegistry
public void unregisterAllSubscriptions(java.lang.String sessionId)
SubscriptionRegistry
unregisterAllSubscriptions
in interface SubscriptionRegistry
unregisterAllSubscriptions
in class AbstractSubscriptionRegistry
protected MultiValueMap<java.lang.String,java.lang.String> findSubscriptionsInternal(java.lang.String destination, Message<?> message)
findSubscriptionsInternal
in class AbstractSubscriptionRegistry
private MultiValueMap<java.lang.String,java.lang.String> filterSubscriptions(MultiValueMap<java.lang.String,java.lang.String> allMatches, Message<?> message)
public java.lang.String toString()
toString
in class java.lang.Object