2015-09-15 9 views
5

Sto usando Primavera (boot) il mio progetto e accedo un JMS Queue (ActiveMQ) utilizzando:Come posso Stop/Start/Pausa una @JmsListener (il modo pulito)

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

E funziona perfettamente, ma devo essere in grado di arrestare/sospendere/avviare questo bean in modo programmato (una chiamata REST o qualcosa del genere)

Quando interrompo o sospendo questo bean, voglio essere sicuro di aver completamente elaborato il messaggio corrente.

qualche idea al riguardo?

grazie

risposta

4

C'è un fagiolo di tipo JmsListenerEndpointRegistry (nome org.springframework.jms.config.internalJmsListenerEndpointRegistry).

È possibile accedere ai contenitori del listener JMS dal Registro di sistema (tutti o per nome) e chiamare stop() su uno (i) desiderato (i); il contenitore si fermerà dopo che tutti i messaggi in-process completano la loro elaborazione.

+0

grazie per la risposta darò una prova e ti faccio sapere – Seb

4

Ecco la soluzione che ho trovato

@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"; 
} 

} 
Problemi correlati