dicembre 17, 2017

Job Scheduling di Message Consumer su ActiveMQ con Spring DMLC e Quartz

In questo articolo riporto un’esempio di come utilizzare Quartz Scheduler sull’oggetto DefaultMessageListenerContainer (DMLC) per controllare lo start/stop di un MessageListener JMS. Per il delivery pianificato direttamente su ActiveMQ invece rimando alla documentazione ufficiale.

Stack

ActiveMQ 5.11.1
JDK 1.8
Maven 3.2
Spring 3.0.5.RELEASE
Quartz Scheduler 1.5.2

Source

SUBVERSION
svn co https://github.com/giuseppeurso-eu/activemq/trunk activemq-samples
GIT
git clone https://github.com/giuseppeurso-eu/activemq

 

Consumer

Per ricevere i messaggi in maniera asincrona creo un Consumer che implementa MessageListener. Il metodo onMessage() si farà carico dello scodamento dei messaggi.
I metodi startConsumption() e stopConsumption() effettueranno invece lo start e stop del DMLC istanziato via Spring.

 

Producer

Per l’invio dei messaggi, utilizzo Spring JmsTemplate nella classe Producer. La proprietà Destinations[ ] potrà tornare utile nel caso di invio su più code.

 

Spring XML configuration

La gestione della dependecy-injection per le classi Consumer e Producer è delegata interamente a Spring. Fare attenzione alla proprietà autoStartup impostata a false nel bean sampleDMLC. L’avvio del listener container infatti è gestito da Quartz. Per realizzare ed eseguire i job sui metodi startConsumption() e stopConsumption() del mio Consumer, utilizzo gli oggetti MethodInvokingJobDetailFactoryBean e SchedulerFactoryBean di Quartz. In questo esempio, ho definito due cron expression rispettivamente per l’avvio e l’arresto del Consumer.

 

Demo

Ho creato una classe ScheduledConsumerTest, che simula un caso di test con JUNIT. La classe crea il context definition di Spring grazie a FileSystemXmlApplicationContext e invia subito un messaggio su una coda. Per simulare un’attesa prima dell’esecuzione dei job, mando in sleep il Thread per 20 secondi subito dopo l’invio di un messaggio. Com Maven compilo ed eseguo il test.

 

giuseppe-urso-activemq-scheduled-message-consumer-01

 

giuseppe-urso-activemq-scheduled-message-consumer-02

Related posts

Leave a Reply

Your email address will not be published.