Skip to content

Terry Laundos Aguiar (terryvel)

Compartilhando experiências para inspirar e apoiar outras jornadas

Menu
Menu

Integrações cloud-native com Apache Camel JBang, Kaoto e Kubernetes

Posted on 19 de fevereiro de 202619 de fevereiro de 2026 by terryvel

Líderes de arquitetura precisam de integrações que acompanhem o ritmo do negócio sem comprometer governança, observabilidade e segurança. Este artigo apresenta um experimento prático que combina Apache Camel JBang, o editor visual Kaoto e um cluster Kubernetes para entregar um fluxo completo: modelagem visual, geração de YAML, build da imagem, publicação em registry, deploy automatizado e validação do serviço de destino. A proposta é ir além da teoria e explorar o funcionamento do Apache Camel a partir da execução de uma integração que simula um caso comum do mundo real.

O Apache Camel permanece como uma das principais referências para implementação de Enterprise Integration Patterns (EIPs), abstraindo protocolos de transporte e permitindo foco nas regras de negócio. Com o JBang e o plugin Kubernetes, o Camel passa a oferecer uma experiência de linha de comando praticamente plug-and-play para desenvolver e implantar integrações diretamente em um cluster. O Kaoto complementa essa abordagem como uma camada low-code/no-code integrada ao VS Code, acelerando a modelagem sem abrir mão da aderência aos artefatos nativos do Camel.

Para o exercício, foi definido um cenário hipotético: empresas que operam em múltiplas moedas precisam atualizar diariamente seus sistemas com novas taxas de câmbio, atrasos ou inconsistências impactam diretamente o faturamento. A solução automatiza a leitura das cotações USD/EUR/BRL em uma API pública e publica os dados em um serviço de faturamento via HTTPS.

O que vamos usar?

ComponenteFunção
Camel JBangApache Camel “plug-and-play” para desenvolvimento rápido
Docker Desktop com Kubernetes habilitadoCluster local para build e deploy
KaotoModelagem visual das rotas Camel dentro do VSCode

Caso de uso

Consulta diária de USD/EUR/BRL e envio para o sistema de faturamento.

Origem da informação

API pública: https://economia.awesomeapi.com.br/last/USD-BRL,EUR-BRL,BTC-BRL

Este endpoint contém uma API de Cotações em tempo real com mais de 150 moedas.

Mais informações aqui: https://docs.awesomeapi.com.br/api-de-moedas

Destino da informação

API pública: https://echo.free.beeceptor.com

Usaremos o Beeceptor (HTTP echo server) para representar o endpoint do sistema financeiro que recebe as informações. O Beeceptor é uma API pública de eco que devolve exatamente o conteúdo da requisição HTTP, facilitando depuração, validação de payloads e demonstrações ao vivo.

Mais informações aqui: https://beeceptor.com/resources/http-echo/

Arquitetura da integração

flowchart LR
    A["API Cotações"]
    B["Apache Camel<br/>(pod)"]
    C["API Sistema Financeiro<br/>(echo)"]
    
    B -- "Polling diário<br/>request GET /last" --> A
    A -- "response" --> B
    B -- "Transformação do payload<br/>Filtra informações relevantes<br/>Mapeia JSON" --> C
    C -- "Status HTTP 201<br/>Validação de resposta" --> B

Do ponto de vista de arquitetura, esta rota exemplifica um pipeline enxuto: coleta de dados externos, normalização e entrega confiável a um outro sistema, tudo com observabilidade nativa de logs e fácil portabilidade para outros ambientes Kubernetes.

O fluxo de desenvolvimento será:

flowchart LR
    A["Camel JBang"]
    B["Jib<br/>(build da imagem)"]
    C["Container Registry"]
    D["Kubernetes<br/>(pull da imagem)"]
    
    A --> B
    B --> C
    C --> D

Instalando o Camel JBang e o Camel Kubernetes plugin

Vamos utilizar o Camel JBang com o plugin Camel Kubernetes plugin.

O Camel JBang é uma forma simples, leve e moderna de desenvolver, executar e testar integrações Apache Camel diretamente pela linha de comando, sem precisar criar um projeto Maven/Gradle completo.

Estou usando macOS e farei a instalação com o brew. Outros métodos de instalação considerando outras plataformas podem ser encontrados na documentação oficial em https://www.jbang.dev/documentation/jbang/latest/installation.html.

$ brew install jbang

Verifique se o JBang está funcionando.

$ jbang version

Instale o Camel CLI.

$ jbang app install camel@apache/camel

Instale o Camel Kubernetes plugin.

$ camel plugin add kubernetes

Verifique se o plugin do Kubernetes está listado como um plugin instalado.

$ camel plugin get

Você deverá receber um resultado semelhante a:

DESCRIPTION
Run Camel applications on Kubernetes

Habilitando o Cluster Kubernetes no Docker Desktop

Vou usar o Kubernetes embutido do Docker Desktop, que já entrega um cluster certificado, simples de habilitar na máquina local. Basta ativá-lo como mostra a figura.

Habilitando o Kubernetes no Docker Desktop

O Camel JBang com o plugin Kubernetes precisa de um container registry para publicar a imagem e criar recursos no Kubernetes (Pod/Deployment) apontando para essa imagem.

Preparando o Container Registry

Vou usar o próprio Docker para subir um Docker Registry localmente sem autenticação para simplificar o processo. Em um terminal utilize o seguinte comando:

$ docker run --rm -p 5001:5000 -v ./data:/var/lib/registry --name local-registry registry

Instalando e configurando o Kaoto

O Kaoto é uma extensão do VS Code que utiliza o Camel CLI via JBang para rodar e empacotar integrações localmente.

Instalar o Kaoto no VSCode é bem simples: pesquise pelo nome e instale.

Instalação da extensão Kaoto no VSCode

Depois de instalado é necessário fazer algumas configurações para realizar o deploy no cluster Kubernetes.

Precisamos ajustar/adicionar os argumentos:

  • –cluster-type=kubernetes (Tipo de cluster alvo. Configurações especiais podem ser aplicadas para Kind ou Minikube)
  • –image-registry=localhost:5001 (Registro de imagens onde a imagem da aplicação será armazenada)
Configuração do Kaoto

Criando a Primeira Integração com Camel

Vamos validar o setup com uma integração simples que faz HTTP GET em https://official-joke-api.appspot.com/random_joke e registra a resposta no log a cada 10s, garantindo que está tudo funcionando corretamente. A Joke API retorna a cada requisição uma piada aleatória, vamos ver essa resposta no log da integração.

Acesse pelo ícone na barra lateral e clique no botão “Camel File”.

Interface do Kaoto

Escolha a opção “Camel Route”.

New Camel File

Escolha a opção “YAML” para o formato do DSL, que se refere à linguagem estruturada que define como as rotas de integração, componentes e padrões são configurados e conectados.

DSL Selection

Você precisará selecionar um diretório onde os arquivos de integrações/rotas serão salvos.

Folder selection

E deverá escolher um nome para a sua integração, nesse exemplo irei utilizar o nome get-joke-route.

Nome da rota

Uma integração básica é criada e exibida no editor do Kaoto.

Nova rota

Essa integração é muito parecida com o que pretendemos fazer para validar nosso setup.

Vamos precisar adicionar o bloco Https, remover o bloco Set Body e ajustar alguns parâmetros de cada bloco.

  1. Clique em cima da caixa da rota (no meu caso, o título da rota está “route-4176”); abrirá uma caixa de diálogo. Nela selecione a seção “All” e preencha o campo id com “get-joke-route”. Esse será o identificador da nossa rota.
  2. Coloque o mouse em cima da seta entre os blocos timer e setBody e clique no botão de (+), pesquise por https e adicione o bloco. Clique no bloco e preencha o campo “Http Uri” com “official-joke-api.appspot.com/random_joke“.
  3. Clique no bloco setBody e depois na lixeira para remover o bloco.
  4. Clique no bloco log e preencha o campo “Message” com “Piada recebida: ${body}”.

Ao terminar nossa integração ficará assim:

Rota Get Joke

O conteúdo da integração formato YAML está logo abaixo.

camel/http-get-joke.yaml

- route:
    id: get-joke-route
    from:
      uri: timer
      parameters:
        period: 10s
        timerName: trigger
      steps:
        - to:
            id: to-2619
            uri: https
            parameters:
              httpUri: official-joke-api.appspot.com/random_joke
        - log:
            message: "Piada recebida: ${body}"

Para testar a integração vamos selecionar a rota no painel de integrações e clicar no botão “Run”. A Kaoto vai empacotar a rota do Apache Camel e executá-la localmente usando o Camel JBang.

Executar integração

Enquanto a integração estiver sendo executada você verá a saída do log no terminal do VS Code como mostra a figura abaixo:

Log da integração rodando localmente

Para parar a integração utilize o botão “Stop” no painel Deployments.

Parando integração

Agora vamos testar o Deploy no Cluster Kubernetes. Para isso, utilize o botão “Deploy” no painel de integrações.

Deploy no Cluster Kubernetes

Ao finalizar o Deploy a integração estará rodando no Cluster Kubernetes. O JBang monta automaticamente uma aplicação baseada em Quarkus.

O Quarkus foi criado justamente pensando em microservices cloud-native. Ou seja, estamos fazendo deploy de um microserviço Quarkus que contém uma rota Camel.

Uma consideração importante aqui, na configuração do Kaoto, mantive o argumento –dev na sessão “Kubernetes Run Arguments”.

O –dev mantém o processo rodando, coloca um watcher de arquivos para rebuild/redeploy automático e imprime continuamente os logs no console (fica mostrando os logs no seu terminal).

Para encerrar o processo você precisa utilizar o Ctrl+C no Terminal do VS Code para sair do dev mode; ao encerrar, ele remove o deployment do cluster no shutdown.

Se você quiser liberar o terminal e continuar a partir daqui olhando os logs do pod diretamente no cluster Kubernetes basta remover o argumento –dev.

Log do Deploy no Cluster Kubernetes

Não vou me aprofundar nos comandos para gestão do cluster, mas você pode ver o status do pod da integração implantada com o comando kubectl get pods, como mostra o print abaixo.

Pods no Cluster Kubernetes

Criando a Segunda Integração – um exemplo mais próximo de algo que seja de fato útil

Agora vamos fazer a integração que vai atuar no nosso caso de uso que é uma integração que de consulta diária de USD/EUR/BRL e envio para o sistema de faturamento (Aqui representando pela API Echo).

Vamos criar a nova integração utilizando o botão “New File” do painel de integrações.

Criando uma nova rota/integraçã

Siga os mesmos passos da integração anterior, utilizando o padrão YAML.

Não irei colocar o print de cada etapa da nova integração aqui, apenas o print final, a descrição e o YAML gerado.

Essa integração é executada uma vez por dia, a rota consulta USD/BRL e USD/EUR, extrai a cotação, monta um JSON padronizado com data e taxas, e faz POST desse JSON para um outro endpoint, registrando status e resposta.

São basicamente 10 blocos com as seguintes funções:

  1. timer: Disparo por timer (a cada 24h).
  2. log: Loga: “Consultando taxas de câmbio…”.
  3. https: Chama uma API externa de câmbio (GET).
  4. unmarshal: Converte JSON recebido na requisição anterior em objeto.
  5. log: Loga o payload recebido no formato “Payload recebido: ${body}”. Útil para debug/auditoria.
  6. setBody: Monta um payload padronizado para enviar para outro endpoint.
  7. log: Loga o payload que vai enviar. Mais uma vez útil para debug/auditoria.
  8. setHeaders: Define headers para POST JSON
  9. https: Envia para o “sistema financeiro” (POST). No caso desse exemplo a API de echo.
  10. log: Loga o status HTTP e a resposta. O endpoint (Beeceptor echo) só devolve o que recebeu, para testes.
Integração exchange-route

Segue abaixo como ficou o arquivo da integração, você pode copiar ele e verificar como cada componente foi configurado no Kaoto.

camel/exchange-route.camel.yaml

- route:
    id: exchange-route
    from:
      uri: timer
      parameters:
        period: 24h
        timerName: exchangeRates
      steps:
        - log:
            id: log-1505
            message: Consultando taxas de câmbio...
        - to:
            id: to-2174
            uri: https
            parameters:
              httpUri: economia.awesomeapi.com.br/last/USD-BRL,USD-EUR
        - unmarshal:
            id: unmarshal-4441
            json: {}
        - log:
            id: log-1916
            message: "Payload recebido: ${body}"
        - setBody:
            id: setBody-1587
            simple:
              expression: |-
                {
                  "base": "USD",
                  "date": "${date:now:yyyy-MM-dd}",
                  "rates": {
                    "BRL": ${body['USDBRL']['bid']},
                    "EUR": ${body['USDEUR']['bid']}
                  }
                }
        - log:
            message: "Enviando para o sistema financeiro: ${body}"
        - setHeaders:
            id: setHeaders-8380
            headers:
              - constant:
                  expression: POST
                name: CamelHttpMethod
              - constant:
                  expression: application/json
                name: Content-Type
        - to:
            id: to-4099
            uri: https
            parameters:
              httpUri: echo.free.beeceptor.com
        - log:
            id: log-2578
            message: "Status recebido do sistema financeiro:
              ${header[CamelHttpResponseCode]} - ${body}"


Tudo funcionou bem, Segue abaixo o print com parte do log da execução.

Log de execução da integração final

Conclusão

Este experimento demonstra que a combinação entre Apache Camel, Kaoto, JBang e Kubernetes reduz significativamente a distância entre modelagem e operação. A modelagem visual gera um artefato declarativo padronizado, o build e o deploy automatizados eliminam etapas manuais e o microserviço nasce já integrado ao ambiente de execução, com logs compreensíveis, status do pod e comportamento previsível desde o primeiro run. Na prática, isso significa menor lead time, maior rastreabilidade e menos fricção no ciclo de vida das integrações.

O empacotamento sobre Quarkus reforça essa abordagem ao entregar um runtime otimizado para cloud: inicialização rápida, baixo consumo de memória, health checks e métricas prontas para observabilidade. Dessa forma, requisitos tradicionalmente tratados apenas após a implantação como operação, monitoramento e confiabilidade passam a fazer parte do desenho da solução desde o início, alinhando desenvolvimento e SRE dentro dos princípios cloud-native.

Embora o exemplo apresentado seja simples (atualização diária de taxas de câmbio) ele percorre toda a cadeia real de uma integração corporativa: coleta externa, transformação de dados, publicação em outro sistema e validação da resposta. O objetivo não foi a complexidade do cenário, mas testar se o stack open source consegue cobrir todas as etapas necessárias para produção com consistência arquitetural.

Mais do que uma ferramenta de integração, o Camel passa a atuar como um padrão operacional para serviços de integração: declarativos, versionáveis, observáveis e compatíveis com pipelines GitOps. Nesse contexto, a produtividade obtida rivaliza plataformas proprietárias enquanto mantém transparência tecnológica, portabilidade e independência de fornecedor.

Assim, o principal aprendizado não é apenas que “é possível integrar usando open source”, mas que é possível fazê-lo mantendo governança, padronização e práticas modernas de engenharia. O cenário de câmbio foi apenas um ponto de partida, o mesmo modelo pode escalar para dezenas ou centenas de integrações com previsibilidade operacional e custo controlado, tornando a abordagem uma alternativa viável para ambientes corporativos de maior porte e criticidade.

Category: Arquitetura Empresarial, Integração de Sistemas, Open Source

Navegação de Post

← A importância de mapear Value Streams

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Terry Laundos Aguiar
Gerente de Arquitetura de TI, apaixonado por dados, integrações e arquitetura empresarial, conectando estratégia de negócios e tecnologia.
  • LinkedIn
  • Instagram
  • X

Análise Estática de Código apache-camel api-integration Application Mapping Arquitetura Empresarial Azure Bluetooth camel-jbang cloud-native DevOps eip Energia Enterprise Architecture Enterprise Architecture Tools Essential Essential Open Source Essential Project Estratégia de Negócios integration-architecture interrupções kaoto kubernetes Lean Manufacturing LED linux Microcontroladores microservices msp430 mspgcc open-source Python Qualidade de Código quarkus rede SonarQube Texas Instruments TI e Negócios Transformação Digital Value Stream Value Stream Canvas Value Stream Mapping Windows

© 2026 Terry Laundos Aguiar (terryvel) | Powered by Minimalist Blog WordPress Theme