Al termine della prima parte dell’articolo eravamo arrivati al punto in cui, prima di iniziare a definire la nostra route Camel, dovevamo predisporre l’ambiente necessario, iniziando dal setup di Apache ActiveMQ. Avere un’istanza di ActiveMQ up and running, fortunatamente, è abbastanza veloce.
Installazione di Apache ActiveMQ
Per prima cosa lo scarichiamo dal suo sito ufficiale. Al momento della stesura di questo articolo l’ultima versione stabile è la 5.14.5 Release.
Una volta scaricato scompattiamo il file zip in una cartella a nostro piacimento, ad esempio in c:\Tools, ottenendo l’alberatura illustrata in figura:
A questo punto, posizionandoci nella sottocartella bin, lanciamo il comando “activemq start“:
activemq start
Questo comando fa partire il server ActiveMQ e sulla console iniziamo a vedere i log della sua inizializzazione. Tra le informazioni utili troviamo l’indirizzo in cui il server è in attesa delle connessioni e l’url a cui è disponibile la console di amministrazione.
Come possiamo vedere dall’immagine sottostante, il broker è in ascolto sull’host locale e sulla porta 61616, che è la sua porta di default, per le connessioni TCP.
Andando al link della WebConsole, http://localhost:8161/admin/ ed inserendo le credenziali di default admin/admin, accediamo alla pagina della dashboard di gestione di ActiveMQ. Da qui possiamo creare i Topic e le Code, vedere quanti Consumer ci sono registrati su ciascuna di esse e monitorare inoltre i messaggi accodati e scodati.
Andiamo quindi nel menù “Queue”, inseriamo il nome della nuova coda che vogliamo creare, ad esempio “camel-example”, e clicchiamo “Create”.
A seguito di questa operazione vediamo la nuova coda nella lista di quelle disponibili.
A questo punto possiamo tornare al nostro progetto Spring Boot e configurare gli estremi per la connessione al server ActiveMQ che abbiamo appena installato e avviato.
Per farlo andiamo all’interno del file “application.properties” e digitando “ActiveMQ” ci viene mostrata dall’intellisense la lista delle relative proprietà disponibili.
Tra quelle che ci vengono proposte scegliamo “spring.activemq.broker-url” con la quale definiamo l’indirizzo del nostro broker ActiveMQ che, come abbiamo visto nello screenshot precedente relativo ai log di start, è in ascolto all’url tcp://localhost:61616.
Valorizziamo quindi la nostra property nel modo seguente:
spring.activemq.broker-url=tcp://localhost:61616
Ora, prima di poter iniziare a definire la Route che parte dalla ricezione di un messaggio JMS su una coda ActiveMQ, dobbiamo aggiungere l’artifact “camel-jms” come dipendenza Maven nel nostro file POM. Verifichiamo l’ultima versione disponibile sul repository Maven Central che, al momento, è la 2.19.0 (la stessa dello starter “camel-spring-boot-starter”).
Aggiungiamo quindi nel POM la dipendenza:
org.apache.camel camel-jms 2.19.0
A questo punto siamo pronti per iniziare a definire la nostra Route all’interno del metodo configure() della classe JMSToFolderRoute.
Dando uno sguardo alla documentazione ufficiale del Componente JMS di Camel vediamo che un endpoint va definito nel modo seguente:
jms:[queue:|topic:]destinationName
Nel nostro caso, siccome stiamo utilizzando una coda e non un topic, il prefisso sarà jms:queue: mentre il “destinationName” sarà il nome della coda che abbiamo creato in precedenza, cioè “camel-example”.
jms:queue:camel-example
Modifichiamo quindi la nostra classe aggiungendo, tramite le fluent API di Camel, uno step from jms e un successivo step di log che stamperà a video il contenuto del messaggio ricevuto sulla coda.
Il contenuto della nostra classe JMSToFolderRoute diventa quindi il seguente:
@Component public class JMSToFolderRoute extends RouteBuilder { @Override public void configure() throws Exception { from("jms:queue:camel-example") .log("TEXT: " + body()); } }
Lanciando la nostra applicazione Spring Boot possiamo vedere nei log che la Route che abbiamo definito viene riconosciuta.
Ora non ci resta che andare nella WebConsole di amministrazione di ActiveMQ e inviare da li un messaggio di test sulla coda “camel-example” che abbiamo creato e su cui è in ascolto la nostra Route Camel, pronta a ricevere il messaggio e stamparlo per il momento in output.
Dal menu della WebConsole clicchiamo “Send” e compiliamo il form che si apre, indicando il nome della coda come “destination” e scrivendo un testo di prova nel campo “message body”. Premiamo poi il pulsante “Send”.
Tornando su Spring Tool Suite possiamo vedere che nei log dell’applicazione compare la riga relativa alla stampa del messaggio ricevuto che effettuiamo con lo step log della nostra route.
Nella riga di log è indicata infatti la route che ha loggato, “route1” di default perchè non abbiamo assegnato un nome personalizzato alla nostra Route, e la stringa “TEXT” seguita dal contenuto del messaggio che abbiamo inviato dalla console di ActiveMQ.
TEXT: This is a test message...
Il primo step della route è quindi correttamente funzionante.
Vai alla terza parte dell’articolo: Spring Boot, Apache Camel e ActiveMQ: una route “from JMS to File” per spostare un file partendo da un messaggio con il suo path – Parte 3
Pingback: Spring Boot, Apache Camel e ActiveMQ: una route “from JSM to File” per spostare un file partendo da un messaggio con il suo path – Parte 1 | Dede Blog
Pingback: Spring Boot, Apache Camel e ActiveMQ: una route “from JMS to File” per spostare un file partendo da un messaggio con il suo path – Parte 3 | Dede Blog
camel-jms version 2.22.0 in the pom otherwise nothing works, at least to me. Until now I have only read articles 1 and 2. I have not had time yet to read article 3.
Anyway thanks for the articles up to now they have been very useful.
Hello