Skip to content

Commit 2bb9ac0

Browse files
committed
Make Boot Rqueue auto-start delay explicit
1 parent b612ab2 commit 2bb9ac0

3 files changed

Lines changed: 33 additions & 4 deletions

File tree

rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueAutoStartupLifecycle.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,18 @@ public class RqueueAutoStartupLifecycle
3434
private final Set<RqueueMessageListenerContainer> delayedContainers =
3535
ConcurrentHashMap.newKeySet();
3636

37+
public void delayAutoStartup(RqueueMessageListenerContainer container) {
38+
container.setAutoStartup(false);
39+
delayedContainers.add(container);
40+
}
41+
3742
@Override
3843
public Object postProcessBeforeInitialization(Object bean, String beanName)
3944
throws BeansException {
4045
if (bean instanceof RqueueMessageListenerContainer) {
4146
RqueueMessageListenerContainer container = (RqueueMessageListenerContainer) bean;
4247
if (container.isAutoStartup()) {
43-
container.setAutoStartup(false);
44-
delayedContainers.add(container);
48+
delayAutoStartup(container);
4549
}
4650
}
4751
return bean;

rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueListenerAutoConfig.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.github.sonus21.rqueue.listener.RqueueMessageListenerContainer;
3434
import com.github.sonus21.rqueue.utils.condition.ReactiveEnabled;
3535
import com.github.sonus21.rqueue.utils.condition.RqueueEnabled;
36+
import org.springframework.beans.factory.annotation.Autowired;
3637
import org.springframework.beans.factory.config.BeanDefinition;
3738
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
3839
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -57,6 +58,9 @@
5758
@Import(RqueueRedisConfigImportSelector.class)
5859
public class RqueueListenerAutoConfig extends RqueueListenerBaseConfig {
5960

61+
@Autowired(required = false)
62+
private RqueueAutoStartupLifecycle rqueueAutoStartupLifecycle;
63+
6064
@Bean
6165
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
6266
@ConditionalOnWebApplication
@@ -83,7 +87,23 @@ public RqueueMessageListenerContainer rqueueMessageListenerContainer(
8387
if (simpleRqueueListenerContainerFactory.getMessageBroker() == null) {
8488
simpleRqueueListenerContainerFactory.setMessageBroker(messageBroker);
8589
}
86-
return simpleRqueueListenerContainerFactory.createMessageListenerContainer();
90+
boolean delayAutoStartup =
91+
rqueueAutoStartupLifecycle != null && simpleRqueueListenerContainerFactory.getAutoStartup();
92+
if (delayAutoStartup) {
93+
simpleRqueueListenerContainerFactory.setAutoStartup(false);
94+
}
95+
RqueueMessageListenerContainer container;
96+
try {
97+
container = simpleRqueueListenerContainerFactory.createMessageListenerContainer();
98+
} finally {
99+
if (delayAutoStartup) {
100+
simpleRqueueListenerContainerFactory.setAutoStartup(true);
101+
}
102+
}
103+
if (delayAutoStartup) {
104+
rqueueAutoStartupLifecycle.delayAutoStartup(container);
105+
}
106+
return container;
87107
}
88108

89109
@Bean

rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/unit/RqueueListenerAutoConfigTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,15 @@ void rqueueMessageListenerContainer()
122122
"com.github.sonus21.rqueue.converter.DefaultMessageConverterProvider",
123123
true);
124124
FieldUtils.writeField(messageAutoConfig, "simpleRqueueListenerContainerFactory", factory, true);
125-
messageAutoConfig.rqueueMessageListenerContainer(rqueueMessageHandler, messageBroker);
125+
FieldUtils.writeField(
126+
messageAutoConfig, "rqueueAutoStartupLifecycle", new RqueueAutoStartupLifecycle(), true);
127+
RqueueMessageListenerContainer container =
128+
messageAutoConfig.rqueueMessageListenerContainer(rqueueMessageHandler, messageBroker);
126129
assertEquals(factory.getRqueueMessageHandler(null).hashCode(), rqueueMessageHandler.hashCode());
127130
// The broker must be propagated onto the factory so the container picks it up.
128131
assertSame(messageBroker, factory.getMessageBroker());
132+
assertFalse(container.isAutoStartup());
133+
assertTrue(factory.getAutoStartup());
129134
}
130135

131136
@Test

0 commit comments

Comments
 (0)