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.