2017-03-21 54 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