Article image
Luis Zancanela
Luis Zancanela18/03/2023 00:32
Compartilhe

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

image

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

image

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:

image

Canal da Mensagem

O meio de comunicação em que uma aplicação se comunica com outra usando mensagem.

image

Mensagem

O menor pedaço de informação que é utilizado na comunicação entre duas aplicações.

image

Pipelines e filtros

Processamento complexo de uma mensagem com independência e flexibilidade.

image

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.

image

Tradução de Mensagens

Transforma mensagens para que sistemas que usam diferentes formatos de dados possam se comunicar.

image

Endpoint de Mensagens

Terminal de canal para enviar e receber mensagens.

image

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

image

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

image

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:

image

Pronto, você já criou sua primeira rota com Apache Camel, simples não?

image

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:

didifive/estudo-apachecamel-activemq: Estudo de Apache Camel com microsserviços se comunicando utilizando o ActiveMQ para mensageria (github.com) - clique aqui para acessar

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:

Home - Apache Camel

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

Compartilhe
Comentários (3)
Luis Zancanela
Luis Zancanela - 18/03/2023 15:49

Muito obrigado Luiz Café e Fernando Araújo por lerem e prestigiar com seus feedbacks. Tentei reunir e resumir os conceitos centrais para ajudar a ampliar o conhecimento para pessoas que têm interesse na área e ainda quem sabe ajudar quem está procurando uma solução para seu desafio em que Camel possa de fato ajudar.

Fernando Araujo
Fernando Araujo - 18/03/2023 13:51

Ótimo artigo, Luis!!

Você deu uma visão macro do Camel, sem tecniquês, para todos entenderem o que ele é e como funciona!

Até eu, que conheço.muito pouco de microsserviços, entendi o sificiente pra ver a utilidade da ferramenta.

Implementar é outro nivel... Só para especialistas, como você

Patabéns!!!

Luiz Café
Luiz Café - 18/03/2023 10:41

Olá, Luis. Ótimo artigo! Consegui entender o funcionamento Apache Camel e aplicação. Confesso que não conhecia, porém com a sua explicação juntamente com os benefícios listados acredito ser muito importante aprender ainda mais sobre o Camel. As referências também ajudam a aprender sobre o uso do Camel e reforçam seu artigo. Parabéns!