Apache Camel - Introducción

Considere una situación en la que una gran tienda de comestibles en línea en su ciudad, como Bigbasket en India, lo invita a diseñar una solución de TI para ellos. La solución estable y escalable les ayudará a superar los problemas de mantenimiento de software que enfrentan hoy. Esta tienda en línea ha estado operando su negocio durante la última década. La tienda acepta pedidos en línea para diferentes categorías de productos de sus clientes y los distribuye a los respectivos proveedores. Por ejemplo, suponga que pide jabones, aceite y leche; estos tres artículos se distribuirán a los tres proveedores respectivos. Luego, los tres proveedores enviarán sus suministros a un punto de distribución común desde donde el centro de entrega cumplirá el pedido completo. Ahora, veamos el problema que enfrentan hoy.

Cuando esta tienda inició su negocio, aceptaba pedidos en un archivo de texto sin formato separado por comas. Durante un período de tiempo, la tienda cambió a la colocación de pedidos basada en mensajes. Más tarde, algún desarrollador de software sugirió una colocación de pedidos basada en XML. Finalmente, la tienda incluso adaptó una interfaz de servicio web. Ahora, aquí viene el verdadero problema. Los pedidos ahora vienen en diferentes formatos. Obviamente, cada vez que la empresa actualizaba el formato de aceptación de pedidos, no quería romper la interfaz previamente implementada para no causar confusiones en la mente del cliente.

Al mismo tiempo, a medida que el negocio seguía creciendo, la tienda agregaba periódicamente nuevos proveedores a su repertorio. Cada uno de esos proveedores tenía su propio protocolo para aceptar pedidos. Una vez más, nos enfrentamos al tema de la integración; nuestra arquitectura de aplicaciones debe ser escalable para adaptarse a nuevos proveedores con su mecanismo único de colocación de pedidos.

La situación completa se muestra en la siguiente figura:

Ahora, veamos cómo Apache Camel puede acudir a su rescate para brindarle una arquitectura de solución elegante, fácil de mantener y escalable para el escenario descrito.

Antes de continuar con la solución, debemos hacer una pequeña suposición. Para todas las discusiones en este tutorial, asumiremos que los pedidos en línea se realizan en formato XML. Aquí se muestra un formato típico para el archivo de pedido que usaremos a lo largo de nuestras discusiones:

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

Usaremos la plantilla XML anterior para ilustrar los ejemplos de Camel en este tutorial.