2017-03-21 66 views
0

監聽器:控制消息偵聽器停止爲一定時期並重新開始聽

<bean id="msglistenerForAuditEvent" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
     <property name="connectionFactory" ref="jmsFactory"/> 
     <property name="sessionTransacted" value="true"/> 
     <property name="destinationName" value="test.event"/> 
     <property name="messageListener" ref="auditListener" /> 
    </bean> 

我想停止容器聽的JMS消息,並且一段時間後再次啓動它?

它可以達到目的嗎?

回答

0

也許有更好的解決辦法,但我認爲這一個可以容納:

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.jms.listener.DefaultMessageListenerContainer; 
import org.springframework.scheduling.annotation.EnableAsync; 
import org.springframework.scheduling.annotation.EnableScheduling; 
import org.springframework.scheduling.annotation.Scheduled; 

@Configuration 
@EnableAsync 
@EnableScheduling 
public class AppConfig { 

    @Autowired 
    private DefaultMessageListenerContainer dmlc; 

    @Scheduled(fixedDelay = 5000) 
    public void start() { 
     if (!dmlc.isRunning()) { 
      dmlc.start(); 
     } 
    } 

    @Scheduled(fixedDelay = 5000) 
    public void stop() { 
     if (dmlc.isRunning()) { 
      dmlc.stop(); 
     } 
    } 

    // @Scheduled(fixedDelay = 5000) 
    // public void startOrStop() { 
    // if (dmlc.isRunning()) { 
    // dmlc.stop(); 
    // } else { 
    // dmlc.start(); 
    // } 
    // } 

    @Bean 
    public DefaultMessageListenerContainer dmlc() { 
     DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer(); 
     // dmlc.set... 
     return dmlc; 
    } 
} 

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html