Integrando Microsserviços com Apache Camel
- #Java
- #Integração
No desenvolvimento de sistemas atualmente é comum se deparar com os conceitos de arquitetura de microsserviços e menções às suas vantagens como a alta disponibilidade do projeto em geral e reaproveitamento de aplicações integrando com outros projetos, porém esta arquitetura apresenta o grande desafio de integração entre as aplicações, os microsserviços, ou seja, como fazer os serviços se conhecerem e se comunicarem para que o conjunto possa executar suas tarefas com êxito.
O Apache Camel é uma tecnologia que pode ajudar a resolver o problema de integração entre os sistemas de forma simples e fácil, proporcionando organização e controle de fluxos.
O que tem por aqui?
- O que é o Apache Camel?
- Enterprise Integration Patterns – EIP
- Vantagens e Desvantagens
- Hello World com Apache Camel com Spring Boot
- Um pouco mais...
O que é o Apache Camel?
O projeto Apache Camel iniciou em 2007, um projeto de código-fonte aberto, disponível sobre a licença Apache 2 e com uma comunidade extremamente forte, fornece suporte para vários protocolos e tipos de dados, sendo extensível e permitindo a introdução de protocolos personalizados.
A parte central do Camel é o gerenciamento de rotas que é feito com Linguagem Específica de Domínio, em inglês Domain Specific Language – DSL. O framework oferece DSLs em Java, XML, Spring XML, Yaml DSL, Rest DSL e Annotation DSL.
Quem já tem familiaridade com o Java é possível integrar o Camel como biblioteca no Spring e Quarkus, mas o Camel também pode ser utilizado como Standalone.
O Camel foi baseado no Enterprise Integration Patterns – EIP
Enterprise Integration Patterns – EIP
No livro Enterprise Integration Patterns, Designing, Buildind, and Deploying Messaging Solutions escrito por Gregor Hohpe e Bobby Woolf foram propostos diversos padrões de integração, se tornando uma referência neste assunto. Conhecendo o Enterprise Integration Patterns – EIP fica mais fácil de compreender o funcionamento do Camel.
A grande característica do padrão da integração é o conceito de produtor e consumidor, que, em resumo, é a conexão entre quem produz um evento ou mensagem e quem consome o evento ou mensagem. Abaixo seguem os sistemas de mensagens que foram sugeridos pelo padrão e são adotados pelo framework:
Canal da Mensagem
O meio de comunicação em que uma aplicação se comunica com outra usando mensagem.
Mensagem
O menor pedaço de informação que é utilizado na comunicação entre duas aplicações.
Pipelines e filtros
Processamento complexo de uma mensagem com independência e flexibilidade.
Roteamento de Mensagens
Desacoplamento das etapas de processamento individuais para que as mensagens possam ser passadas para diferentes filtros conforme um conjunto de condições.
Tradução de Mensagens
Transforma mensagens para que sistemas que usam diferentes formatos de dados possam se comunicar.
Endpoint de Mensagens
Terminal de canal para enviar e receber mensagens.
Vantagens e Desvantagens
Vantagens:
- Suporte aos transportes e modelos de mensagens como HTTP, Kafka, JMS, JBI, SCA, MINA ou CXF.
- A biblioteca padrão possui o mínimo de componentes.
- Possui centenas de outros componentes que podem ser adicionados para acessar bancos de dados, filas de mensagens e APIs.
- Várias Linguagens Específicas de Domínio (DSL, em inglês), como Java, XML, Groovy, Kotlin e YAML.
- Integração com frameworks populares como Spring e Quarkus.
- Suporte a 50 formatos de dados, incluindo formatos padrão da indústria para finanças, telecomunicações e saúde.
Desvantagens:
- Curva de aprendizado relativamente alta para dominar recursos e componentes. É necessário o conhecimento específico em EIPs e DSLs e de preferência também em Java.
- Pode não ser compatível com algumas tecnologias ou protocolos mais recentes ou menos populares já que não foram abordados pela comunidade.
- Pode ser necessário entender de programação assíncrona e reativa para entender melhor os conceitos e complexidade de integração de sistemas.
- Pode apresentar mal funcionamento ou mal desempenho se não for configurado corretamente
Hello World com Apache Camel com Spring Boot
Passo 1
Vá até o site o site do Spring Initializr, https://start.spring.io, selecione Projeto Maven, Linguagem Java, e adicione as seguintes dependências:
- Web
- Camel
- DevTools
Após adicionar as dependências, clique em Generate e baixe o projeto.
Passo 2
Abra o projeto em sua IDE favorita (exemplo: IntelliJ, Eclipse ou Visual Studio Code) e espere ela indexar o projeto.
Crie uma classe, "MinhaPrimeiraRotaComCamel" com o código abaixo:
package com.example.demo;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@Component
public class MinhaPrimeiraRotaComCamel extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:helloworld?period=1000")
.log("Hello World com Camel e Spring");
}
}
A classe estende a "RouteBuilder" do Apache Camel e contém a anotação "@Component" para o Spring realizar o carregamento da rota em seu contexto. Quando se estende a "RouterBuilder" é necessário implementar o método "configure()" que aparece com a anotação "@Override", neste método é que são adicionadas as rotas.
O Apache Camel consiste basicamente em criar rotas de consumo (from) e produção (log ou to), apesar do código acima ser pequeno, já é uma rota. No “from”, é utilizado o componente “timer”.
Sintaxe básica do componente timer:
timer:name[?options]
no código o nome está como “helloworld” e o options, que representa os parâmetros, possui o “period” que está com o valor de “1000”, sendo 1000 milissegundos.
Afinal, o que o código da classe faz?
Em resumo, a cada segundo o camel irá disparar um log com a mensagem “Hello World com Camel e Spring” no console.
Passo 3 - Final
Agora é só rodar a aplicação pela classe principal DemoApplication.
O console irá gerar a mensagem “Hello World com Camel e Spring” a cada segundo no terminal, ficando parecido com a imagem abaixo:
Pronto, você já criou sua primeira rota com Apache Camel, simples não?
Um pouco mais...
Além do componente de timer do exemplo em Hello World, pode-se utilizar muitos outros componentes, tais como o de arquivos (file) e o de filas (activemq para o gerenciador de filas Active MQ, entre outros)
Aproveito para compartilhar repositório de um pequeno projeto que criei para aprender a integração entre microsserviços utilizando Java, Spring, Camel, ActiveMQ e Docker:
Não esqueça de deixar uma star se gostou.
Tem alguma dúvida? Gostou ou achou complicado? Seu feedback será muito bem-vindo e pode ajudar a melhorar este e outros artigos, comente aqui e entre em contato pelo LinkedIn: Luis Carlos Zancanela | LinkedIn - clique aqui para acessar
Deixe também seu upvote ^. Obrigado!
Referências:
Introduction To Apache Camel | Baeldung
O que é o Apache CAMEL? Veja as suas principais características. (devmedia.com.br)
Vantagens e desvantagens ao utilizar um servidor Apache | (ehow.com.br)
Spring Boot Microservices + Apache Camel: A Hello World Example - DZone