Apache Camel vs Enterprise Service Bus


A integração de sistemas corporativos é exigida em quase todas as empresas devido a novos produtos e aplicativos. E integrá-los gera diversos problemas. Novos paradigmas têm emergido a cada década, como comunicação cliente/servidor, arquitetura orientada a serviços (service-oriented architecture – SOA) e cloud computing.

Além disso, diferentes interfaces, protocolos e tecnologias emergem. Ao invés de armazenar dados em arquivos como no passado (por muitos anos), hoje, são usados bancos de dados SQL com frequência. Às vezes até bancos de dados NoSQL são necessários em alguns casos de uso. Chamadas de procedimento remoto síncrono ou mensagens assíncronas são usadas para comunicação através de várias tecnologias, como RMI, SOAP Web Services, REST e JMS. Entretanto, todos os aplicativos e produtos das últimas décadas precisam se comunicar entre si para trabalharem perfeitamente juntos.

Como podemos definir o Apache Camel

Apache Camel é um framework de integração open source leve que implementa a grande maioria dos Enterprise Integration Patterns. Logo, é possível integrar diferentes aplicações usando os modelos requeridos. Pode-se usar Java, Spring XML, Kotlin, Scala ou Groovy. Quase todas as tecnologias estão disponíveis, como, por exemplo, HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty e muito, muito mais (a maioria dos Enterprise Service Bus também o sustentam). Além disso, componentes customizados também podem ser criados facilmente.

Esse framework de integração pode ser implementado como aplicativo independente em um WEB container (como Tomcat ou Jetty), em um servidor de aplicação J2EE (JBoss AS ou WebSphere AS), em um ambiente OSGi ou combinado com o container Spring.

O Apache Camel foi desenhado com o objetivo de suprir todas as necessidades de integração. Dessa forma, irá atender padrões de consumo e envio de mensagem, transformação, composição e encaminhamento de mensagem, tornando toda a integração simples e padronizada

Enterprise Integration Patterns

Claro, você poderia reinventar a roda para cada problema, escrever um código ‘espaguete’ e deixar as aplicações trabalharem em conjunto. Contudo, numa perspectiva de longo prazo, esta prática não está alinhada à gestão, estratégia e tecnologias das corporações, para este tipo de solução.

Os modelos ou padrões de integração corporativa, do Inglês ‘Enterprise Integration Patterns (EIP)’, ajudam a resolver problemas e usar formas padronizadas para integrar os sistemas. Com isso, os mesmos conceitos serão usados para transformar e encaminhar mensagens. Desta forma, uma boa ideia é deixar de lado  a reinvenção da roda toda vez que encontrar um problema.

Figura 1: Enterprise Integration Patterns (EIP)

Caminhos de Integração do Sistema

Existem três caminhos para integrar aplicativos. Os EIPs podem ser usados em cada uma delas:

Solução 1 – Faça você mesmo

Implementar uma solução individual que funcione para resolver o problema sem fracioná-lo. Isso funciona e é, provavelmente, a alternativa mais rápida para casos pequenos. Nessa solução, você terá que criar tudo sozinho. É provável que a manutenção seja elevada se membros da equipe se alterarem com frequência. Essa solução aborda o uso do MDM para criar um componente de mensagem integrada. Por exemplo, o padrão de design para ter um Dead Letter Channel e garantia de entrega precisaria ser criado do zero.

Solução 2 – Framework de Integração

Usar um framework que ajude a integrar sistemas de forma padronizada utilizando vários modelos de integração. Isso reduz muitos esforços. Qualquer desenvolvedor entenderá facilmente a implementação, bastando conhecer o formato utilizado.  Essa estrutura cria um componente leve com um recurso mais próximo e mais fácil de ser aderente numa arquitetura de Microserviços (Docker, Cloud Foundry, OSGI).

Solução 3 –  Enterprise Service Bus

Usar um barramento corporativo para integrar as aplicações, ou seja, o Enterprise Service Bus também usa um framework de integração em seu core operacional. Mas há ainda muitas outras características, como gestão de processos de integração, registro e rastreamento de atividades das execuções. Na maioria das vezes, é possível ainda configurar a rota e outros detalhes com uma interface gráfica do usuário – mas cada um deve decidir por si só, se isso reduz complexidade e esforço no desenvolvimento de integrações sistêmcias. Normalmente, o ESB é um produto complexo. A curva de aprendizado é bem maior. Esse tipo de produto está caindo em desuso, quando comparado a adoção de uma arquitetura de microserviços (muitos querem romper com a estrutura complicada e monolítica estabelecida pela natureza do marketing desse produto por grandes players no mercado de tecnologia mundial).

Finalmente, quando usar Apache Camel?

Apache Camel é perfeito para qualquer um que queira integrar múltiplos aplicativos com protocolos e tecnologias diferentes. Além de suportar tantas tecnologias e diferentes linguagens de programação, há uma característica que realmente faz a diferença: cada integração usa os mesmos conceitos! Não importa qual protocolo esteja disponível ou qual tecnologia seja usada. Muito menos qual linguagem de domínio específico (DSL) – pode ser Java, Scala, Groovy ou Spring XML. É tudo construído da mesma maneira: existe um produtor, um consumidor, endpoints, Enterprise Integration Patterns, processors/beans customizados (para transformação customizada, por exemplo) e parâmetros (como credenciais).

Abaixo temos um exemplo que contém todos esses conceitos usando Java DSL:

from(“activeMQ:orderQueue”).transaction().log(“processingorder”).to(mock:”notYetExistingInterface”)

Dois outros detalhes muito importantes são: suporte para tratamento de erros (handling errors), como usar Dead Letter Channels, e testes unitários, integrados e automatizados. Tudo pode ser facilmente testado usando uma extensão JUnit Camel. E, mais uma vez, serão usados sempre os mesmos conceitos, independente da tecnologia que está sendo suportada.

Confira em nosso último webinar quais são os padrões de integração corporativos, os Enterprise Integration Patterns – EIP, e como o framework Apache Camel se relaciona com eles.

Conclusão

Integração entre diferentes sistemas e aplicações é uma tarefa complexa, porém, fundamentalmente necessária com o surgimento de novos produtos e aplicativos. Um framework como o Apache Camel pode aumentar a produtividade do processo de integração, diminuindo sua complexidade e seu impacto. Assim, ao invés de tentar reinventar a roda, devemos adotar componentes que nos ajudem a simplificar a implementação e otimizar tempo, custos e o trabalho dos desenvolvedores nas empresas.

Vale ressaltar que em mundo mais ágil as aplicações cloud-ready nunca fizeram tanto sentido como hoje. Portanto, o uso de um framework de integração que está preparado para este novo modelo se encaixa como uma luva.