Apache Camel - Introduzione

Considera una situazione in cui un grande negozio di alimentari online nella tua città come il Bigbasket in India ti invita a progettare una soluzione IT per loro. La soluzione stabile e scalabile li aiuterà a superare i problemi di manutenzione del software che devono affrontare oggi. Questo negozio online gestisce la sua attività negli ultimi dieci anni. Il negozio accetta ordini online per diverse categorie di prodotti dai propri clienti e li distribuisce ai rispettivi fornitori. Supponiamo ad esempio di ordinare dei saponi, dell'olio e del latte; questi tre articoli saranno distribuiti ai tre rispettivi fornitori. I tre fornitori invieranno quindi le loro forniture a un punto di distribuzione comune da cui l'intero ordine verrà evaso dal centro di consegna. Ora, esaminiamo il problema che stanno affrontando oggi.

Quando questo negozio ha iniziato la sua attività, accettava ordini in un file di testo semplice separato da virgole. Per un periodo di tempo, il negozio è passato al posizionamento degli ordini basato sui messaggi. Successivamente, alcuni sviluppatori di software hanno suggerito un posizionamento di ordini basato su XML. Alla fine, il negozio ha persino adattato un'interfaccia del servizio web. Ora, ecco che arriva il vero problema. Gli ordini ora sono disponibili in diversi formati. Ovviamente, ogni volta che l'azienda aggiornava il formato di accettazione dell'ordine, non voleva rompere l'interfaccia precedentemente implementata per non creare confusione nella mente del cliente.

Parallelamente, mentre l'attività continuava a crescere, il negozio periodicamente aggiungeva nuovi fornitori al proprio repertorio. Ciascuno di questi fornitori aveva il proprio protocollo per accettare gli ordini. Ancora una volta, affrontiamo il problema dell'integrazione; la nostra architettura applicativa deve essere scalabile per accogliere nuovi fornitori con il loro meccanismo di posizionamento degli ordini unico.

L'intera situazione è mostrata nella figura seguente:

Ora, vediamo come Apache Camel può venire in tuo soccorso per fornire un'architettura di soluzione elegante, gestibile e scalabile per lo scenario descritto.

Prima di procedere con la soluzione, dobbiamo fare una piccola ipotesi. Per tutte le discussioni in questo tutorial, presumeremo che gli ordini online siano inseriti in formato XML. Un formato tipico per il file dell'ordine che utilizzeremo durante le nostre discussioni è mostrato qui:

<?xml version = "1.0" encoding = "UTF-8"?>
<OrderID Order = "001">
   <order product = "soaps">
      <items>
         <item>
            <Brand>Cinthol</Brand>
            <Type>Original</Type>
            <Quantity>4</Quantity>
            <Price>25</Price>
         </item>
         <item>
            <Brand>Cinthol</Brand>
            <Type>Lime</Type>
            <Quantity>6</Quantity>
            <Price>30</Price>
         </item>
      </items>
   </order>
   
   <order product = "Oil">
      <items>
         <item>
            <Brand>Saffola</Brand>
            <Type>Gold</Type>
            <Quantity>2</Quantity>
            <Price>649</Price>
         </item>
         <item>
            <Brand>Fortune</Brand>
            <Type>Sunlite</Type>
            <Quantity>1</Quantity>
            <Price>525</Price>
         </item>
      </items>
   </order>
   
   <order product = "Milk">
      <items>
         <item>
            <Product>Milk</Product>
            <Brand>Amul</Brand>
            <Type>Pure</Type>
            <Quantity>2</Quantity>
            <Price>60</Price>
         </item>
      </items>
   </order>
</OrderID>

Useremo il modello XML sopra per illustrare gli esempi di Camel in questo tutorial.