Expose DefaultSubscriptionRegistry's cache limit through SimpleBrokerMessageHandler and MessageBrokerRegistry
Issue: SPR-14516
This commit is contained in:
parent
06edd232b3
commit
6d5af60a7c
|
@ -50,7 +50,7 @@ import org.springframework.util.PathMatcher;
|
||||||
* in memory and uses a {@link org.springframework.util.PathMatcher PathMatcher}
|
* in memory and uses a {@link org.springframework.util.PathMatcher PathMatcher}
|
||||||
* for matching destinations.
|
* for matching destinations.
|
||||||
*
|
*
|
||||||
* <p>As of 4.2 this class supports a {@link #setSelectorHeaderName selector}
|
* <p>As of 4.2, this class supports a {@link #setSelectorHeaderName selector}
|
||||||
* header on subscription messages with Spring EL expressions evaluated against
|
* header on subscription messages with Spring EL expressions evaluated against
|
||||||
* the headers to filter out messages in addition to destination matching.
|
* the headers to filter out messages in addition to destination matching.
|
||||||
*
|
*
|
||||||
|
@ -65,11 +65,10 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry {
|
||||||
public static final int DEFAULT_CACHE_LIMIT = 1024;
|
public static final int DEFAULT_CACHE_LIMIT = 1024;
|
||||||
|
|
||||||
|
|
||||||
/** The maximum number of entries in the cache */
|
|
||||||
private volatile int cacheLimit = DEFAULT_CACHE_LIMIT;
|
|
||||||
|
|
||||||
private PathMatcher pathMatcher = new AntPathMatcher();
|
private PathMatcher pathMatcher = new AntPathMatcher();
|
||||||
|
|
||||||
|
private volatile int cacheLimit = DEFAULT_CACHE_LIMIT;
|
||||||
|
|
||||||
private String selectorHeaderName = "selector";
|
private String selectorHeaderName = "selector";
|
||||||
|
|
||||||
private volatile boolean selectorHeaderInUse = false;
|
private volatile boolean selectorHeaderInUse = false;
|
||||||
|
@ -81,6 +80,20 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry {
|
||||||
private final SessionSubscriptionRegistry subscriptionRegistry = new SessionSubscriptionRegistry();
|
private final SessionSubscriptionRegistry subscriptionRegistry = new SessionSubscriptionRegistry();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the {@link PathMatcher} to use.
|
||||||
|
*/
|
||||||
|
public void setPathMatcher(PathMatcher pathMatcher) {
|
||||||
|
this.pathMatcher = pathMatcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the configured {@link PathMatcher}.
|
||||||
|
*/
|
||||||
|
public PathMatcher getPathMatcher() {
|
||||||
|
return this.pathMatcher;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specify the maximum number of entries for the resolved destination cache.
|
* Specify the maximum number of entries for the resolved destination cache.
|
||||||
* Default is 1024.
|
* Default is 1024.
|
||||||
|
@ -96,20 +109,6 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry {
|
||||||
return this.cacheLimit;
|
return this.cacheLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Specify the {@link PathMatcher} to use.
|
|
||||||
*/
|
|
||||||
public void setPathMatcher(PathMatcher pathMatcher) {
|
|
||||||
this.pathMatcher = pathMatcher;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the configured {@link PathMatcher}.
|
|
||||||
*/
|
|
||||||
public PathMatcher getPathMatcher() {
|
|
||||||
return this.pathMatcher;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure the name of a selector header that a subscription message can
|
* Configure the name of a selector header that a subscription message can
|
||||||
* have in order to filter messages based on their headers. The value of the
|
* have in order to filter messages based on their headers. The value of the
|
||||||
|
@ -123,12 +122,13 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry {
|
||||||
* @since 4.2
|
* @since 4.2
|
||||||
*/
|
*/
|
||||||
public void setSelectorHeaderName(String selectorHeaderName) {
|
public void setSelectorHeaderName(String selectorHeaderName) {
|
||||||
Assert.notNull(selectorHeaderName);
|
Assert.notNull(selectorHeaderName, "'selectorHeaderName' must not be null");
|
||||||
this.selectorHeaderName = selectorHeaderName;
|
this.selectorHeaderName = selectorHeaderName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the name for the selector header.
|
* Return the name for the selector header.
|
||||||
|
* @since 4.2
|
||||||
*/
|
*/
|
||||||
public String getSelectorHeaderName() {
|
public String getSelectorHeaderName() {
|
||||||
return this.selectorHeaderName;
|
return this.selectorHeaderName;
|
||||||
|
|
|
@ -42,6 +42,7 @@ import org.springframework.util.PathMatcher;
|
||||||
* {@link SubscriptionRegistry} and sends messages to subscribers.
|
* {@link SubscriptionRegistry} and sends messages to subscribers.
|
||||||
*
|
*
|
||||||
* @author Rossen Stoyanchev
|
* @author Rossen Stoyanchev
|
||||||
|
* @author Juergen Hoeller
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
|
@ -54,6 +55,8 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
|
|
||||||
private PathMatcher pathMatcher;
|
private PathMatcher pathMatcher;
|
||||||
|
|
||||||
|
private Integer cacheLimit;
|
||||||
|
|
||||||
private TaskScheduler taskScheduler;
|
private TaskScheduler taskScheduler;
|
||||||
|
|
||||||
private long[] heartbeatValue;
|
private long[] heartbeatValue;
|
||||||
|
@ -90,14 +93,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
Assert.notNull(subscriptionRegistry, "SubscriptionRegistry must not be null");
|
Assert.notNull(subscriptionRegistry, "SubscriptionRegistry must not be null");
|
||||||
this.subscriptionRegistry = subscriptionRegistry;
|
this.subscriptionRegistry = subscriptionRegistry;
|
||||||
initPathMatcherToUse();
|
initPathMatcherToUse();
|
||||||
}
|
initCacheLimitToUse();
|
||||||
|
|
||||||
private void initPathMatcherToUse() {
|
|
||||||
if (this.pathMatcher != null) {
|
|
||||||
if (this.subscriptionRegistry instanceof DefaultSubscriptionRegistry) {
|
|
||||||
((DefaultSubscriptionRegistry) this.subscriptionRegistry).setPathMatcher(this.pathMatcher);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubscriptionRegistry getSubscriptionRegistry() {
|
public SubscriptionRegistry getSubscriptionRegistry() {
|
||||||
|
@ -105,14 +101,46 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When configured, the given PathMatcher is passed down to the
|
* When configured, the given PathMatcher is passed down to the underlying
|
||||||
* SubscriptionRegistry to use for matching destination to subscriptions.
|
* SubscriptionRegistry to use for matching destination to subscriptions.
|
||||||
|
* <p>Default is a standard {@link org.springframework.util.AntPathMatcher}.
|
||||||
|
* @since 4.1
|
||||||
|
* @see #setSubscriptionRegistry
|
||||||
|
* @see DefaultSubscriptionRegistry#setPathMatcher
|
||||||
|
* @see org.springframework.util.AntPathMatcher
|
||||||
*/
|
*/
|
||||||
public void setPathMatcher(PathMatcher pathMatcher) {
|
public void setPathMatcher(PathMatcher pathMatcher) {
|
||||||
this.pathMatcher = pathMatcher;
|
this.pathMatcher = pathMatcher;
|
||||||
initPathMatcherToUse();
|
initPathMatcherToUse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initPathMatcherToUse() {
|
||||||
|
if (this.pathMatcher != null && this.subscriptionRegistry instanceof DefaultSubscriptionRegistry) {
|
||||||
|
((DefaultSubscriptionRegistry) this.subscriptionRegistry).setPathMatcher(this.pathMatcher);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When configured, the specified cache limit is passed down to the
|
||||||
|
* underlying SubscriptionRegistry, overriding any default there.
|
||||||
|
* <p>With a standard {@link DefaultSubscriptionRegistry}, the default
|
||||||
|
* cache limit is 1024.
|
||||||
|
* @since 4.3.2
|
||||||
|
* @see #setSubscriptionRegistry
|
||||||
|
* @see DefaultSubscriptionRegistry#setCacheLimit
|
||||||
|
* @see DefaultSubscriptionRegistry#DEFAULT_CACHE_LIMIT
|
||||||
|
*/
|
||||||
|
public void setCacheLimit(Integer cacheLimit) {
|
||||||
|
this.cacheLimit = cacheLimit;
|
||||||
|
initCacheLimitToUse();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initCacheLimitToUse() {
|
||||||
|
if (this.cacheLimit != null && this.subscriptionRegistry instanceof DefaultSubscriptionRegistry) {
|
||||||
|
((DefaultSubscriptionRegistry) this.subscriptionRegistry).setCacheLimit(this.cacheLimit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure the {@link org.springframework.scheduling.TaskScheduler} to
|
* Configure the {@link org.springframework.scheduling.TaskScheduler} to
|
||||||
* use for providing heartbeat support. Setting this property also sets the
|
* use for providing heartbeat support. Setting this property also sets the
|
||||||
|
@ -130,6 +158,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the configured TaskScheduler.
|
* Return the configured TaskScheduler.
|
||||||
|
* @since 4.2
|
||||||
*/
|
*/
|
||||||
public TaskScheduler getTaskScheduler() {
|
public TaskScheduler getTaskScheduler() {
|
||||||
return this.taskScheduler;
|
return this.taskScheduler;
|
||||||
|
@ -151,6 +180,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The configured value for the heart-beat settings.
|
* The configured value for the heart-beat settings.
|
||||||
|
* @since 4.2
|
||||||
*/
|
*/
|
||||||
public long[] getHeartbeatValue() {
|
public long[] getHeartbeatValue() {
|
||||||
return this.heartbeatValue;
|
return this.heartbeatValue;
|
||||||
|
@ -160,6 +190,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
* Configure a {@link MessageHeaderInitializer} to apply to the headers
|
* Configure a {@link MessageHeaderInitializer} to apply to the headers
|
||||||
* of all messages sent to the client outbound channel.
|
* of all messages sent to the client outbound channel.
|
||||||
* <p>By default this property is not set.
|
* <p>By default this property is not set.
|
||||||
|
* @since 4.1
|
||||||
*/
|
*/
|
||||||
public void setHeaderInitializer(MessageHeaderInitializer headerInitializer) {
|
public void setHeaderInitializer(MessageHeaderInitializer headerInitializer) {
|
||||||
this.headerInitializer = headerInitializer;
|
this.headerInitializer = headerInitializer;
|
||||||
|
@ -167,6 +198,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the configured header initializer.
|
* Return the configured header initializer.
|
||||||
|
* @since 4.1
|
||||||
*/
|
*/
|
||||||
public MessageHeaderInitializer getHeaderInitializer() {
|
public MessageHeaderInitializer getHeaderInitializer() {
|
||||||
return this.headerInitializer;
|
return this.headerInitializer;
|
||||||
|
|
|
@ -143,7 +143,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A hook for sub-classes to customize the message channel for inbound messages
|
* A hook for subclasses to customize the message channel for inbound messages
|
||||||
* from WebSocket clients.
|
* from WebSocket clients.
|
||||||
*/
|
*/
|
||||||
protected void configureClientInboundChannel(ChannelRegistration registration) {
|
protected void configureClientInboundChannel(ChannelRegistration registration) {
|
||||||
|
@ -176,7 +176,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A hook for sub-classes to customize the message channel for messages from
|
* A hook for subclasses to customize the message channel for messages from
|
||||||
* the application or message broker to WebSocket clients.
|
* the application or message broker to WebSocket clients.
|
||||||
*/
|
*/
|
||||||
protected void configureClientOutboundChannel(ChannelRegistration registration) {
|
protected void configureClientOutboundChannel(ChannelRegistration registration) {
|
||||||
|
@ -224,7 +224,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A hook for sub-classes to customize message broker configuration through the
|
* A hook for subclasses to customize message broker configuration through the
|
||||||
* provided {@link MessageBrokerRegistry} instance.
|
* provided {@link MessageBrokerRegistry} instance.
|
||||||
*/
|
*/
|
||||||
protected void configureMessageBroker(MessageBrokerRegistry registry) {
|
protected void configureMessageBroker(MessageBrokerRegistry registry) {
|
||||||
|
@ -253,7 +253,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
||||||
addReturnValueHandlers(returnValueHandlers);
|
addReturnValueHandlers(returnValueHandlers);
|
||||||
handler.setCustomReturnValueHandlers(returnValueHandlers);
|
handler.setCustomReturnValueHandlers(returnValueHandlers);
|
||||||
|
|
||||||
PathMatcher pathMatcher = this.getBrokerRegistry().getPathMatcher();
|
PathMatcher pathMatcher = getBrokerRegistry().getPathMatcher();
|
||||||
if (pathMatcher != null) {
|
if (pathMatcher != null) {
|
||||||
handler.setPathMatcher(pathMatcher);
|
handler.setPathMatcher(pathMatcher);
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Protected method for plugging in a custom sub-class of
|
* Protected method for plugging in a custom subclass of
|
||||||
* {@link org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler
|
* {@link org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler
|
||||||
* SimpAnnotationMethodMessageHandler}.
|
* SimpAnnotationMethodMessageHandler}.
|
||||||
* @since 4.2
|
* @since 4.2
|
||||||
|
@ -324,7 +324,6 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expose alias for 4.1 compatibility
|
// Expose alias for 4.1 compatibility
|
||||||
|
|
||||||
@Bean(name={"messageBrokerTaskScheduler", "messageBrokerSockJsTaskScheduler"})
|
@Bean(name={"messageBrokerTaskScheduler", "messageBrokerSockJsTaskScheduler"})
|
||||||
public ThreadPoolTaskScheduler messageBrokerTaskScheduler() {
|
public ThreadPoolTaskScheduler messageBrokerTaskScheduler() {
|
||||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||||
|
@ -461,6 +460,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class NoOpBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
private class NoOpBrokerMessageHandler extends AbstractBrokerMessageHandler {
|
||||||
|
|
||||||
public NoOpBrokerMessageHandler() {
|
public NoOpBrokerMessageHandler() {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -51,6 +51,8 @@ public class MessageBrokerRegistry {
|
||||||
|
|
||||||
private PathMatcher pathMatcher;
|
private PathMatcher pathMatcher;
|
||||||
|
|
||||||
|
private Integer cacheLimit;
|
||||||
|
|
||||||
|
|
||||||
public MessageBrokerRegistry(SubscribableChannel clientInboundChannel, MessageChannel clientOutboundChannel) {
|
public MessageBrokerRegistry(SubscribableChannel clientInboundChannel, MessageChannel clientOutboundChannel) {
|
||||||
Assert.notNull(clientInboundChannel);
|
Assert.notNull(clientInboundChannel);
|
||||||
|
@ -96,6 +98,16 @@ public class MessageBrokerRegistry {
|
||||||
return this.brokerChannelRegistration;
|
return this.brokerChannelRegistration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String getUserDestinationBroadcast() {
|
||||||
|
return (this.brokerRelayRegistration != null ?
|
||||||
|
this.brokerRelayRegistration.getUserDestinationBroadcast() : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getUserRegistryBroadcast() {
|
||||||
|
return (this.brokerRelayRegistration != null ?
|
||||||
|
this.brokerRelayRegistration.getUserRegistryBroadcast() : null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure one or more prefixes to filter destinations targeting application
|
* Configure one or more prefixes to filter destinations targeting application
|
||||||
* annotated methods. For example destinations prefixed with "/app" may be
|
* annotated methods. For example destinations prefixed with "/app" may be
|
||||||
|
@ -137,16 +149,6 @@ public class MessageBrokerRegistry {
|
||||||
return this.userDestinationPrefix;
|
return this.userDestinationPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getUserDestinationBroadcast() {
|
|
||||||
return (this.brokerRelayRegistration != null ?
|
|
||||||
this.brokerRelayRegistration.getUserDestinationBroadcast() : null);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getUserRegistryBroadcast() {
|
|
||||||
return (this.brokerRelayRegistration != null ?
|
|
||||||
this.brokerRelayRegistration.getUserRegistryBroadcast() : null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure the PathMatcher to use to match the destinations of incoming
|
* Configure the PathMatcher to use to match the destinations of incoming
|
||||||
* messages to {@code @MessageMapping} and {@code @SubscribeMapping} methods.
|
* messages to {@code @MessageMapping} and {@code @SubscribeMapping} methods.
|
||||||
|
@ -162,6 +164,7 @@ public class MessageBrokerRegistry {
|
||||||
* <p>When the simple broker is enabled, the PathMatcher configured here is
|
* <p>When the simple broker is enabled, the PathMatcher configured here is
|
||||||
* also used to match message destinations when brokering messages.
|
* also used to match message destinations when brokering messages.
|
||||||
* @since 4.1
|
* @since 4.1
|
||||||
|
* @see org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry#setPathMatcher
|
||||||
*/
|
*/
|
||||||
public MessageBrokerRegistry setPathMatcher(PathMatcher pathMatcher) {
|
public MessageBrokerRegistry setPathMatcher(PathMatcher pathMatcher) {
|
||||||
this.pathMatcher = pathMatcher;
|
this.pathMatcher = pathMatcher;
|
||||||
|
@ -172,6 +175,18 @@ public class MessageBrokerRegistry {
|
||||||
return this.pathMatcher;
|
return this.pathMatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the cache limit to apply for registrations with the broker.
|
||||||
|
* <p>This is currently only applied for the destination cache in the
|
||||||
|
* subscription registry. The default cache limit there is 1024.
|
||||||
|
* @since 4.3.2
|
||||||
|
* @see org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry#setCacheLimit
|
||||||
|
*/
|
||||||
|
public MessageBrokerRegistry setCacheLimit(int cacheLimit) {
|
||||||
|
this.cacheLimit = cacheLimit;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected SimpleBrokerMessageHandler getSimpleBroker(SubscribableChannel brokerChannel) {
|
protected SimpleBrokerMessageHandler getSimpleBroker(SubscribableChannel brokerChannel) {
|
||||||
if (this.simpleBrokerRegistration == null && this.brokerRelayRegistration == null) {
|
if (this.simpleBrokerRegistration == null && this.brokerRelayRegistration == null) {
|
||||||
|
@ -180,6 +195,7 @@ public class MessageBrokerRegistry {
|
||||||
if (this.simpleBrokerRegistration != null) {
|
if (this.simpleBrokerRegistration != null) {
|
||||||
SimpleBrokerMessageHandler handler = this.simpleBrokerRegistration.getMessageHandler(brokerChannel);
|
SimpleBrokerMessageHandler handler = this.simpleBrokerRegistration.getMessageHandler(brokerChannel);
|
||||||
handler.setPathMatcher(this.pathMatcher);
|
handler.setPathMatcher(this.pathMatcher);
|
||||||
|
handler.setCacheLimit(this.cacheLimit);
|
||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -16,9 +16,6 @@
|
||||||
|
|
||||||
package org.springframework.messaging.simp.config;
|
package org.springframework.messaging.simp.config;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
import static org.mockito.Mockito.*;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -73,6 +70,9 @@ import org.springframework.validation.Errors;
|
||||||
import org.springframework.validation.Validator;
|
import org.springframework.validation.Validator;
|
||||||
import org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean;
|
import org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test fixture for {@link AbstractMessageBrokerConfiguration}.
|
* Test fixture for {@link AbstractMessageBrokerConfiguration}.
|
||||||
*
|
*
|
||||||
|
@ -392,6 +392,13 @@ public class MessageBrokerConfigurationTests {
|
||||||
assertEquals(false, new DirectFieldAccessor(resolver).getPropertyValue("keepLeadingSlash"));
|
assertEquals(false, new DirectFieldAccessor(resolver).getPropertyValue("keepLeadingSlash"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void customCacheLimit() {
|
||||||
|
SimpleBrokerMessageHandler broker = this.customContext.getBean(SimpleBrokerMessageHandler.class);
|
||||||
|
DefaultSubscriptionRegistry registry = (DefaultSubscriptionRegistry) broker.getSubscriptionRegistry();
|
||||||
|
assertEquals(8192, registry.getCacheLimit());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void userBroadcasts() throws Exception {
|
public void userBroadcasts() throws Exception {
|
||||||
SimpUserRegistry userRegistry = this.brokerRelayContext.getBean(SimpUserRegistry.class);
|
SimpUserRegistry userRegistry = this.brokerRelayContext.getBean(SimpUserRegistry.class);
|
||||||
|
@ -441,6 +448,7 @@ public class MessageBrokerConfigurationTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static class BaseTestMessageBrokerConfig extends AbstractMessageBrokerConfiguration {
|
static class BaseTestMessageBrokerConfig extends AbstractMessageBrokerConfiguration {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -449,6 +457,7 @@ public class MessageBrokerConfigurationTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@Configuration
|
@Configuration
|
||||||
static class SimpleBrokerConfig extends BaseTestMessageBrokerConfig {
|
static class SimpleBrokerConfig extends BaseTestMessageBrokerConfig {
|
||||||
|
@ -477,6 +486,7 @@ public class MessageBrokerConfigurationTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
static class BrokerRelayConfig extends SimpleBrokerConfig {
|
static class BrokerRelayConfig extends SimpleBrokerConfig {
|
||||||
|
|
||||||
|
@ -488,10 +498,12 @@ public class MessageBrokerConfigurationTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
static class DefaultConfig extends BaseTestMessageBrokerConfig {
|
static class DefaultConfig extends BaseTestMessageBrokerConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
static class CustomConfig extends BaseTestMessageBrokerConfig {
|
static class CustomConfig extends BaseTestMessageBrokerConfig {
|
||||||
|
|
||||||
|
@ -525,6 +537,7 @@ public class MessageBrokerConfigurationTests {
|
||||||
registry.configureBrokerChannel().setInterceptors(this.interceptor, this.interceptor, this.interceptor);
|
registry.configureBrokerChannel().setInterceptors(this.interceptor, this.interceptor, this.interceptor);
|
||||||
registry.configureBrokerChannel().taskExecutor().corePoolSize(31).maxPoolSize(32).keepAliveSeconds(33).queueCapacity(34);
|
registry.configureBrokerChannel().taskExecutor().corePoolSize(31).maxPoolSize(32).keepAliveSeconds(33).queueCapacity(34);
|
||||||
registry.setPathMatcher(new AntPathMatcher(".")).enableSimpleBroker("/topic", "/queue");
|
registry.setPathMatcher(new AntPathMatcher(".")).enableSimpleBroker("/topic", "/queue");
|
||||||
|
registry.setCacheLimit(8192);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -540,6 +553,7 @@ public class MessageBrokerConfigurationTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class TestValidator implements Validator {
|
private static class TestValidator implements Validator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -552,6 +566,7 @@ public class MessageBrokerConfigurationTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
private static class CustomThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
|
private static class CustomThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue