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 

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

COMPONENTI

Come in tutti gli ESB anche su Apache Camel le implementazioni più importanti sono:

  1. Consumer, chi reperisce l'input e lo invia al canale
  2. 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:

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:



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.

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

Post popolari in questo blog

Hadoop, how to create a single node cluster using docker

How to install IOTA node with docker

Apache Spark - Try it using docker!