Capire e sviluppare un componente apache camel
INTRODUZIONE
Negli ultimi anni sofware sempre connessi e sempre più eterogenei sono stati i protagonisti e sono i framework ESB quelli che permettono di farli dialogare trasformando "il dialogo" in un unico flusso logico.
Di ESB (Enterprise Service Bus) ce ne sono diversi. La fondazione Apache ha ormai da più di 10 anni portato avanti una propria implementazione che può contare di una comunità di sviluppatori molto attiva e decine e decine di componenti.
Comunità che da qualche anno aiuto saltuariamente pure io.
Settimana scorsa però mi sono accorto di una grave mancanza.... Apache Camel, alla fine del 2018, era carente su componenti DLT. A questo punto ho preso un impegno e ho sviluppato il primo componente per IOTA (che spero verrà pubblicato presto)
Ma quali sono le classi chiave da imparare per sviluppare un componente Camel? E i requisiti? Vediamo un pò di fare ordine
Comunità che da qualche anno aiuto saltuariamente pure io.
Settimana scorsa però mi sono accorto di una grave mancanza.... Apache Camel, alla fine del 2018, era carente su componenti DLT. A questo punto ho preso un impegno e ho sviluppato il primo componente per IOTA (che spero verrà pubblicato presto)
Ma quali sono le classi chiave da imparare per sviluppare un componente Camel? E i requisiti? Vediamo un pò di fare ordine
PREREQUISITI
Per sviluppare la versione corrente di Apache Camel occorre la JDK 8+ e un sistema con almeno 8 GB di RAM
Vista la complessità del progetto è alquanto improbabile che si riesca a compilare tutto con un unico comando maven. Consiglio quindi di compilare solamente i submodule corrispondenti
Vista la complessità del progetto è alquanto improbabile che si riesca a compilare tutto con un unico comando maven. Consiglio quindi di compilare solamente i submodule corrispondenti
COMPONENTI
Come in tutti gli ESB anche su Apache Camel le implementazioni più importanti sono:
- Consumer, chi reperisce l'input e lo invia al canale
- Producer, chi trasforma il dato e lo invia al canale
Naturalmente è possibile, se il canale è privo di ramificazioni, inserire 1 consumer e N producer per ottenere quello che si vuole (esempio prendo un file da FTP, lo codifico mediante un algoritmo e lo invio per mail)
CLASSI JAVA
Ogni componente camel ha al suo interno almeno 4 classi
- Component
- Solitamente estende la classe org.apache.camel.impl.DefaultComponent e ha il compito di creare la classe endpoint, inizializzandone le proprierà.
- Endpoint
- Solitamente estende la class org.apache.camel.impl.DefaultEndpoint e contiene tutti i parametri per far funzionare il componente (esempio url dove effettuare la richiesta, oppure utente e password da utilizzare)
- Constants
- Classe di utilità con all'interno la definizione delle varie costanti
- Consumer
- Classe che reperisce l'informazione dalla sorgente. Di solito estende la classe org.apache.camel.impl.PollingConsumerSupport per invocare la sorgente a intervalli regolari
- Producer
- Invia il dato alla sorgente. Di solito estende la classe org.apache.camel.impl.DefaultProducer
EXCHANGE, MESSAGE, HEADERS e PROPERTIES
Il canale ESB presente nei libri di teoria è popolato da messaggi. I messaggi sono composti da 3 attori principali:- Un Exchange corrisponde ad un insieme di messaggi ed rappresenta l'intero flusso.
- Ad ogni step del flusso viene creato / letto un Message, che è corredato da più Headers per veicolare l'esecuzione. Gli Headers del messaggio vengono propagati al prossimo step!
- Le Properties invece sono l'area di immagazzinamento dati dell' Exchange e sono accessibili in qualunque momento del flusso.
N.B: Possono esistere componenti senza Consumer o Producer!
RISORSE
Essendo un prodotto open-source è sempre ottimo avere sotto mano i riferimenti ufficiali.
Vi segnalo:
Vi segnalo:
- JIRA Ufficiale
- Repository Github
- Sito internet ufficiale
- Documentazione
- http://camel.apache.org/documentation.html
- https://github.com/apache/camel/tree/master/components
- Ogni file adoc all'interno dei componenti!
- Forum di Supporto
- Forum degli sviluppatori
INIZIARE A SVILUPPARE
Come abbiamo detto il progetto è molto grande e se occorre sviluppare o modificare i componenti occorre compilarli uno per volta
Con maven lanciare la compilazione su di un singolo componente occorre usare il seguente comando:
Con maven lanciare la compilazione su di un singolo componente occorre usare il seguente comando:
mvn clean compile -pl components/<nome-componente>
Per quanto riguarda invece il code style occorre utilizzare il Code Style Format File che trovate sulla cartella etc/eclipse/CamelCodeFormatter.xml
N.B: Il code style verrà controllato una volta effettuata la Push Request all'interno del progetto principale, per ovviare a noiosi ritardi è buona norma lanciare il seguente comando per controllare che non ci siano anomalie.
Per qualunque problema / dubbio potete rispondere a questo post o scrivermi a fabryprog AT gmail DOT com
Alla prossima!
N.B: Il code style verrà controllato una volta effettuata la Push Request all'interno del progetto principale, per ovviare a noiosi ritardi è buona norma lanciare il seguente comando per controllare che non ci siano anomalie.
mvn clean install -Pfastinstall,sourcecheck
Per qualunque problema / dubbio potete rispondere a questo post o scrivermi a fabryprog AT gmail DOT com
Alla prossima!
Commenti
Posta un commento