Apache Camel - Introdução

Considere uma situação em que um grande supermercado online em sua cidade, como o Bigbasket na Índia, o convida a projetar uma solução de TI para eles. A solução estável e escalonável os ajudará a superar os problemas de manutenção de software que enfrentam hoje. Esta loja online administra seus negócios há uma década. A loja aceita pedidos online de diferentes categorias de produtos de seus clientes e os distribui aos respectivos fornecedores. Por exemplo, suponha que você peça sabonetes, óleo e leite; esses três itens serão distribuídos aos três respectivos fornecedores. Os três fornecedores enviarão seus suprimentos para um ponto de distribuição comum, de onde todo o pedido será atendido pelo centro de entrega. Agora, vejamos o problema que eles enfrentam hoje.

Quando esta loja iniciou seus negócios, ela estava aceitando pedidos em um arquivo de texto simples separado por vírgulas. Após um período de tempo, a loja mudou para a colocação de pedidos baseada em mensagens. Mais tarde, algum desenvolvedor de software sugeriu uma colocação de pedido baseada em XML. Eventualmente, a loja até adaptou uma interface de serviço da web. Agora, aí vem o verdadeiro problema. Os pedidos agora vêm em formatos diferentes. Obviamente, toda vez que a empresa atualizava o formato de aceitação do pedido, ela não queria quebrar a interface implantada anteriormente para não causar confusões na mente do cliente.

Ao mesmo tempo, à medida que o negócio crescia, a loja agregava periodicamente novos fornecedores ao seu repertório. Cada um desses fornecedores tinha seu próprio protocolo para aceitar pedidos. Mais uma vez, enfrentamos o problema da integração; nossa arquitetura de aplicativo deve ser escalável para acomodar novos fornecedores com seu mecanismo exclusivo de colocação de pedido.

Toda a situação é mostrada na figura a seguir -

Agora, vamos ver como o Apache Camel pode vir em seu socorro para fornecer uma arquitetura de solução escalável, elegante e sustentável para o cenário descrito.

Antes de prosseguirmos com a solução, precisamos fazer uma pequena suposição. Para todas as discussões neste tutorial, assumiremos que os pedidos online são feitos no formato XML. Um formato típico para o arquivo de pedido que usaremos ao longo de nossas discussões é mostrado aqui -

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

Estaremos usando o modelo XML acima para ilustrar os exemplos do Camel neste tutorial.