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 2

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.
CamelJMStoFile 06 - Download Apache ActiveMQ

Una volta scaricato scompattiamo il file zip in una cartella a nostro piacimento, ad esempio in c:\Tools, ottenendo l’alberatura illustrata in figura:
CamelJMStoFile 07 - Apache ActiveMQ dir setup

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.
CamelJMStoFile 08 - Apache ActiveMQ starting logs

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”.
CamelJMStoFile 09 - Apache ActiveMQ WebConsole create new queue

A seguito di questa operazione vediamo la nuova coda nella lista di quelle disponibili.
CamelJMStoFile 10 - Apache ActiveMQ WebConsole list of available queues
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.

CamelJMStoFile 11 - SpringBoot ActiveMQ available properties
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

CamelJMStoFile 12 - SpringBoot ActiveMQ broker url property
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:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jms</artifactId>
    <version>2.19.0</version>
</dependency>

CamelJMStoFile 13 -Camel JMS Maven POM dependency
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.
CamelJMStoFile 14 -SpringBoot Camel logs JMS Route started
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”.
CamelJMStoFile 15 -ActiveMQ WebConsole send message to queue
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...

CamelJMStoFile 16 - SpringBoot logs Camel Route message output

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

This entry was posted in $1$s. Bookmark the permalink.

2 thoughts on “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 2

  1. 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

  2. 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

Leave a Reply

Your email address will not be published. Required fields are marked *