O que é Apache Camel? Entendendo na prática com código Java
\n\nVocê já se perguntou como grandes sistemas trocam dados? Um grava logs em arquivo, outro espera JSON via HTTP, um terceiro trabalha com filas RabbitMQ. Conectá-los diretamente significa escrever uma montanha de código "cola": parsers, adaptadores, tratadores de erros. É aqui que entra o Apache Camel — um poderoso framework de integração que assume toda essa rotina.
\n\nSe você está procurando uma explicação do Apache Camel com exemplos reais em Java, está no lugar certo. Vamos analisar como funcionam as rotas, para que servem os EIP (Padrões de Integração Empresarial) e por que o Camel não é apenas mais um ORM, mas sim um canivete suíço para integração.
\n\nO problema que o Apache Camel resolve
\nImagine: você tem três serviços:
\n- \n
- Serviço A fornece dados em arquivos CSV via FTP. \n
- Serviço B aceita apenas XML via HTTP. \n
- Serviço C trabalha com Kafka. \n
Sem um framework de integração, você teria que escrever um conector separado para cada par. E se amanhã surgir AMQP ou MongoDB? O código cresceria, os testes se tornariam um pesadelo.
\nApache Camel resolve isso de forma simples: você descreve as rotas (routes) em Java ou XML, e o Camel conecta automaticamente os componentes necessários (FTP, HTTP, Kafka, JMS e centenas de outros). Você não precisa conhecer os detalhes do protocolo — o Camel faz tudo "debaixo do capô".
\n\nArquitetura básica: rotas e componentes
\nNa base do Camel está o conceito de rota (route). É uma cadeia de passos: da origem (from) ao destino (to). Entre eles podem haver transformações, filtros, enriquecimento de dados.
\nExemplo de uma rota simples:
\nfrom("file:data/input?noop=true")\n .log("Arquivo recebido: ${header.CamelFileName}")\n .to("file:data/output");\n\nAqui lemos arquivos da pasta data/input (com a opção noop=true, para não excluir os originais) e os copiamos para data/output. O Camel monitora alterações, bloqueios e erros automaticamente.
Análise do código: do arquivo ao banco de dados
\nSuponha que você precise ler CSV de uma pasta, analisar as linhas e salvar no PostgreSQL. Sem o Camel, você escreveria FileWatcher + OpenCSV + JDBC. Com o Camel, algumas linhas:
\nimport org.apache.camel.builder.RouteBuilder;\n\npublic class CsvToDbRoute extends RouteBuilder {\n @Override\n public void configure() throws Exception {\n from("file:data/csv?delay=5000")\n .unmarshal().csv() // analisa CSV em lista de listas\n .split(body()) // processa cada linha\n .process(exchange -> {\n // Converte a linha em uma consulta SQL\n List<String> row = exchange.getIn().getBody(List.class);\n String sql = String.format("INSERT INTO users (name, age) VALUES ('%s', %s)", row.get(0), row.get(1));\n exchange.getIn().setBody(sql);\n })\n .to("jdbc:myDataSource?useHeadersAsParameters=true");\n }\n}\n\nO que acontece aqui?
\n- \n
unmarshal().csv()— analisador CSV embutido. \n split(body())— divide o conjunto de linhas em mensagens individuais. \n process()— lógica personalizada (conversão para SQL). \n to("jdbc:myDataSource")— executa a consulta através do componente JDBC. \n
Este é um exemplo do Apache Camel em ação: mínimo de código, máximo de funcionalidade.
\n\nPadrões de Integração (EIP) — a arma secreta do Camel
\nUma das principais vantagens do Camel é a implementação dos Enterprise Integration Patterns (EIP). São soluções arquiteturais comprovadas: Content-Based Router, Splitter, Aggregator, Wire Tap e outros.
\nExemplo de roteador baseado em conteúdo (Content-Based Router):
\nfrom("direc