Arquitetura e Conceitos do Apache Camel

O Apache Camel é um framework de integração de código aberto que facilita a conexão de sistemas e a troca de dados entre eles usando um modelo baseado em rotas.

Nesta seção, vamos apresentar alguns conceitos fundamentais para entender a lógica das integrações.

Para uma compreensão profunda e completa, consulte a documentação oficial do Apache Camel. Ela oferece uma visão detalhada dos recursos, padrões e melhores práticas.

Arquitetura

O diagrama abaixo mostra uma visão geral dos conceitos principais que compõem a arquitetura do Camel.

camel architecture
  • O contexto Camel atua como o centro que gerencia a integração de sistemas.

  • Dentro do contexto Camel, o mecanismo de roteamento utiliza uma DSL (Linguagem Específica de Domínio) para definir e criar as rotas.

  • As rotas conectam endpoints, que são pontos de entrada e saída para sistemas externos, utilizando diferentes componentes.

  • Os componentes fornecem conectividade e abstração para diversos protocolos e tecnologias, como arquivos, HTTP, JMS, entre outros.

  • As mensagens percorrem essas rotas e são processadas por processadores, que transformam e manipulam os dados conforme necessário. Eles realizam funções como filtragem de mensagens, EIPs, roteamento, transformação, mediação, enriquecimento, validação e interceptação.

Conceitos

Contexto Camel

O contexto Camel é o núcleo central da aplicação Camel. Ele é responsável por gerenciar o ciclo de vida das rotas, componentes e outros recursos.

camel context

Linguagem específica de domínio (DSL)

Uma DSL, do inglês Domain-Specific Language, é uma linguagem projetada para um domínio específico que permite que os usuários definam e configurem rotas e integrações.

O Camel oferece suporte a DSLs em diversas linguagens, como Java, Groovy, YAML, XML, entre outras. No Sensedia Integrations, utilizamos o YAML DSL para a construção de rotas.

Rota

Uma rota define o caminho que uma mensagem segue dentro do sistema de integração, mostrando as etapas de processamento aplicadas à mensagem enquanto ela viaja de uma fonte para um destino.

Geralmente, uma rota consiste em uma série de etapas conectadas em uma sequência linear, detalhando como a mensagem será manipulada, roteada ou mediada.

As rotas são descritas usando uma sintaxe simples e declarativa que facilita a leitura e a compreensão.

Veja abaixo um exemplo de rota Camel em formato de código e de diagrama:

- from:
    id: from-4032
    uri: rest:post:/logs
    steps:
      - log:
          message: {{beforePost}}
      - toD:
          uri: http://{{supermock}}
          parameters:
            bridgeEndpoint: true
            httpMethod: POST
      - log:
          message: "afterPost"

route diagram example

  • A rota começa com um gatilho do tipo REST que recebe requisições POST no endpoint /logs.

  • Depois, a rota registra nos logs uma mensagem com o valor {{beforePost}}.

  • Em seguida, envia uma requisição POST para o endpoint http://{{supermock}}, com os parâmetros:

    • bridgeEndpoint: true e

    • httpMethod: POST.

  • Finalmente, registra nos logs a mensagem "afterPost".

Consulte exemplos de rotas na página Tutoriais e Exemplos.

Mensagem

Uma mensagem é a unidade mínima de dados que é propagada e modificada ao logo de uma rota. Ela é formada por dois componentes principais:

  • Cabeçalho (header): metadados associados à mensagem. Os cabeçalhos podem incluir informações como identificadores, tipos de dados, ou qualquer outra informação relevante para o processamento da mensagem.

  • Corpo (body): pode ser qualquer objeto Java. Tipicamente é uma cadeia de caracteres (string), mas pode ser transformado em objetos mais complexos conforme a codificação da integração ou dos componentes envolvidos.

message

Exchange

Exchange é um objeto que encapsula a mensagem e alguns metadados durante a troca de informações entre sistemas. Além disso, fornece métodos utilitários para uso nas integrações, como a habilidade de salvar e recuperar propriedades.

Endpoints

Endpoints são componentes que representam um ponto de conexão onde dados podem ser enviados ou recebidos dentro de um fluxo de integração. Eles definem como os dados são acessados e manipulados em um sistema.

Os endpoints são referenciados na DSL através de URIs.

Componentes

Componentes são artefatos usados na construção de uma rota que permitem a integração e a comunicação entre diferentes sistemas e protocolos. Eles atuam como pontos de conexão entre o Camel e as várias tecnologias ou serviços externos que você deseja integrar em suas rotas, como por exemplo:

  • HTTP: faz uma chamada a um endpoint HTTP;

  • FTP: obtém ou envia arquivos para um servidor FTP;

  • Quartz: gera eventos de acordo com um agendamento.

Padrões de integração empresarial (EIPs)

EIPs, do inglês Enterprise Integration Patterns, são padrões de integração que descrevem soluções comuns para problemas frequentes encontrados em sistemas de integração e comunicação entre aplicativos.

Eles ajudam a estruturar e otimizar a comunicação entre aplicações ao fornecer métodos para roteamento de mensagens, transformação de dados, agregação e divisão de mensagens, filtragem de mensagens e manejo de erros. Exemplos:

  • Split: divide uma mensagem em várias partes para processamento individual.

  • Choice: seleciona uma rota específica com base em condições ou critérios.

  • On Exception: define como lidar com exceções e erros durante o processamento da mensagem.

Como componentes de lógica, EIPs podem ser comparados às ferramentas gerais (general tools) utilizadas nas integrações do tipo Diagram.

Linguagens de expressão

Uma linguagem de expressão é uma forma de escrever instruções em EIPs que ajudam a processar e manipular dados enquanto eles passam por uma rota de integração.

Imagine que você está movendo dados de um lugar para outro, e precisa fazer algo com esses dados, como extrair informações, modificar o conteúdo ou decidir para onde enviá-los. A linguagem de expressão permite que você escreva essas instruções de forma que o Camel possa entender e aplicar durante o fluxo de dados.

Por exemplo, a condição para um Choice pode ser escrita usando linguagens como Groovy, JSONPath, JQ etc.

Formatos de dados

Formatos de dados ou data formats são artefatos referenciados pelos EIPs de transformação de dados para determinar o formato de entrada ou saída dos dados. Eles facilitam a conversão de dados entre formatos como XML, JSON, CSV e outros.

Para mais informações sobre formatos de dados, acesse:

  • Antes de codificar, desenhe o seu fluxo de integração.

  • Defina as etapas necessárias para a execução conforme as regras de negócio.

  • Mapeie estas etapas para os componentes e/ou EIPs necessários.

  • Só então codifique!

Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]