2015-09-15 9 views
5

मैं अपने प्रोजेक्ट पर स्प्रिंग (बूट) का उपयोग कर रहा हूँ और मैं एक JMS क़तार (ActiveMQ) का उपयोग का उपयोग कर:मैं कैसे रोक सकता/शुरू/एक @JmsListener रोकें (स्वच्छ रास्ता)

@JmsListener(destination = "mydestinationQueue") 
public void processMessage(String content) { 
    //do something 
} 

और यह काम करता है पूरी तरह से लेकिन मुझे इस बीन को प्रोग्रामेटिक रूप से रोकने/रोकने/शुरू करने में सक्षम होना चाहिए (एक आरईएसटी कॉल या उस तरह कुछ)

जब मैं इस बीन को रोकता या रोकता हूं तो मैं निश्चित संदेश को पूरी तरह से संसाधित करना चाहता हूं।

इसके बारे में कोई विचार?

धन्यवाद

उत्तर

4

वहाँ प्रकार JmsListenerEndpointRegistry (नाम org.springframework.jms.config.internalJmsListenerEndpointRegistry) के एक सेम है।

आप रजिस्ट्री (सभी या नाम से) के जेएमएस श्रोता कंटेनरों तक पहुंच सकते हैं और अपनी इच्छानुसार stop() पर कॉल कर सकते हैं; कंटेनर किसी भी इन-प्रोसेस संदेशों को पूरा करने के बाद बंद हो जाएगा।

+0

आपके उत्तर के लिए धन्यवाद मिल गया है मैं इसे आजमाइए और आपको इसकी जानकारी देंगे है – Seb

4

यहाँ समाधान मैं

@RestController 
@RequestMapping("/jms") 
public class JmsController { 

    @Autowired 
    ApplicationContext context; 

@RequestMapping(value="/halt", method= RequestMethod.GET) 
public @ResponseBody 
String haltJmsListener() { 
    JmsListenerEndpointRegistry customRegistry = 
      context.getBean("jmsRegistry", JmsListenerEndpointRegistry.class); 
    customRegistry.stop(); 
    return "Jms Listener Stopped"; 
} 

@RequestMapping(value="/restart", method=RequestMethod.GET) 
public @ResponseBody 
String reStartJmsListener() { 
    JmsListenerEndpointRegistry customRegistry = 
      context.getBean("jmsRegistry", JmsListenerEndpointRegistry.class); 
    customRegistry.start(); 
    return "Jms Listener restarted"; 
} 

@RequestMapping(value="/stopApp", method=RequestMethod.GET) 
public @ResponseBody 
String stopApp() { 
    String[] args={}; 
    SpringApplication.run(FacturationApplicationFrontDaemon.class, args).close(); 
    return "stopped"; 
} 

} 
संबंधित मुद्दे