Inicializar SimpleMessageListenerContainer como parado
-
21-12-2019 - |
Pergunta
Existe uma maneira de iniciar uma SimpleMessageListenerContainer
como parado?
i.e.Eu não quero consumir quaisquer mensagens JMS até mais tarde, quando um usuário executar uma ação para iniciar o JMS recipiente
Eu tentei chamar .stop()
assim que eu criar o bean...mas parece ser muito cedo.
Chamada stop/start, mais tarde, funciona bem, mas eu não quero correr o risco de processamento de todas as mensagens até que o usuário está pronto.
Solução
O SimpleMessageListenerContainer
implementa o SmartLifecycle
interface.Esta interface define um método isAutoStartup
.Quando este método retorna true
o componente irá iniciar automaticamente.
A maioria dos grãos de implementação do SmartLifecycle
a interface também tem um método setAutoStartup
para permitir a configuração desta propriedade.Definindo-a false
irá desactivar o início automático do componente.
<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="autoStartup" value="false" />
// Other Properties initialization
</bean>
Ou em Java Config
@Bean
public SimpleMessageListenerContainer container() {
SimpleMessageListenerContainer smlc = new SimpleMessageListenerContainer();
smlc.setAutoStartup(false);
...
return smlc;
}
No momento, não é possível definir esta propriedade utilizando jms espaço de nomes.