Apache Camel - Introduction

Prenons une situation où une grande épicerie en ligne de votre ville, comme le Bigbasket en Inde, vous invite à concevoir une solution informatique pour elle. La solution stable et évolutive les aidera à surmonter les problèmes de maintenance logicielle auxquels ils sont confrontés aujourd'hui. Cette boutique en ligne mène ses activités depuis une dizaine d'années. Le magasin accepte les commandes en ligne de différentes catégories de produits de ses clients et les distribue aux fournisseurs respectifs. Par exemple, supposons que vous commandiez des savons, de l'huile et du lait; ces trois articles seront distribués aux trois fournisseurs respectifs. Les trois fournisseurs enverront ensuite leurs fournitures à un point de distribution commun d'où l'intégralité de la commande sera exécutée par le centre de livraison. Voyons maintenant le problème auquel ils sont confrontés aujourd'hui.

Lorsque ce magasin a démarré ses activités, il acceptait les commandes dans un fichier texte en clair séparées par des virgules. Au fil du temps, le magasin est passé au placement de commande basé sur les messages. Plus tard, un développeur de logiciels a suggéré un placement de commande basé sur XML. Finalement, le magasin a même adapté une interface de service Web. Maintenant, voici le vrai problème. Les commandes se présentent désormais sous différents formats. Évidemment, à chaque fois que l'entreprise a mis à jour le format d'acceptation de commande, elle ne voulait pas casser l'interface précédemment déployée pour ne pas créer de confusion dans l'esprit du client.

Dans le même temps, alors que l'entreprise continuait de croître, le magasin ajoutait périodiquement de nouveaux fournisseurs à son répertoire. Chacun de ces fournisseurs avait son propre protocole d'acceptation des commandes. Une fois de plus, nous sommes confrontés au problème de l'intégration; notre architecture d'application doit être évolutive pour accueillir les nouveaux fournisseurs avec leur mécanisme unique de placement de commande.

La situation entière est illustrée dans la figure suivante -

Voyons maintenant comment Apache Camel peut venir à votre secours pour fournir une architecture de solution élégante, maintenable et évolutive pour le scénario décrit.

Avant de procéder à la solution, nous devons faire une petite hypothèse. Pour toutes les discussions de ce tutoriel, nous supposerons que les commandes en ligne sont passées au format XML. Un format typique du fichier de commande que nous utiliserons tout au long de nos discussions est présenté ici -

<?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>

Nous utiliserons le modèle XML ci-dessus pour illustrer les exemples Camel de ce didacticiel.