Usando o Apache Camel com Spring
1. Visão geral
Este artigo demonstrará como configurar e usarApache Camel com Spring.
O Apache Camel oferece muitos componentes úteis que suportam bibliotecas comoJPA,Hibernate,FTP,Apache-CXF,AWS-S3e, claro, muitos outros - todos para ajudar na integração de dados entre dois sistemas diferentes.
Por exemplo, usando os componentes Hibernate e Apache CXF, você pode extrair dados de um banco de dados e enviá-los para outro sistema através de chamadas da API REST.
Neste tutorial, examinaremos um exemplo simples do Camel - lendo um arquivo e convertendo seu conteúdo em maiúsculas e depois de volta em minúsculas. Vamos usarFile componente Camel's e Spring 4.2.
Aqui estão os detalhes completos do exemplo:
-
Ler arquivo do diretório de origem
-
Converta o conteúdo do arquivo em maiúsculas usando umProcessor personalizado
-
Grava a saída convertida em um diretório de destino
-
Converta o conteúdo do arquivo em minúsculas usandoCamel Translator
-
Grava a saída convertida em um diretório de destino
2. Adicionar Dependências
Para usar o Apache Camel com Spring, você precisará das seguintes dependências no seu arquivo POM:
2.16.1
4.2.4.RELEASE
org.apache.camel
camel-core
${env.camel.version}
org.apache.camel
camel-spring
${env.camel.version}
org.apache.camel
camel-stream
${env.camel.version}
org.springframework
spring-context
${env.spring.version}
Então nós temos:
-
camel-core - a principal dependência do Apache Camel
-
camel-spring - nos permite usar Camel com Spring
-
camel-stream - uma dependência opcional, que você pode usar (por exemplo) para exibir algumas mensagens no console enquanto as rotas estão em execução
-
spring-context - a dependência padrão do Spring, necessária em nosso caso, pois vamos executar rotas Camel em um contexto Spring
3. Contexto do Camelo da Primavera
Primeiro, criaremos o arquivo Spring Config onde definiremos mais tarde nossas rotas de Camel.
Observe como o arquivo contém todos os namespaces e locais de esquema necessários do Apache Camel e Spring:
O elemento<camelContext> representa (sem surpresa) o contexto Camel, que pode ser comparado a um contexto de aplicativo Spring. Agora seu arquivo de contexto está pronto para começar a definir rotas do Camel.
3.1. Rota de camelo com processador personalizado
A seguir, escreveremos nossa primeira rota para converter o conteúdo do arquivo em maiúsculas.
Precisamos definir uma fonte a partir da qual a rota lerá dados. Pode ser um banco de dados, arquivo, console ou qualquer número de outras fontes. No nosso caso, será arquivo.
Então, precisamos definir o processador dos dados que serão lidos da fonte. Neste exemplo, vamos escrever uma classe de processador personalizada. Esta classe será um bean Spring que implementará o padrãoCamel Processor Interface.
Depois que os dados são processados, precisamos informar a rota para onde direcionar os dados processados. Mais uma vez, isso pode ser uma de uma ampla variedade de saídas, como banco de dados, arquivo ou console. No nosso caso, vamos armazená-lo em um arquivo.
Para configurar essas etapas, incluindo a entrada, processador e saída, adicione a seguinte rota ao arquivo de contexto Camel:
Além disso, devemos definir o beanmyFileProcessor:
3.2. Processador de maiúsculas personalizado
Agora precisamos criar o processador de arquivo personalizado que definimos em nosso bean. Ele deve implementar a interface CamelProcessor, definindo um único métodoprocess, que leva um objetoExchange como sua entrada. Este objeto fornece os detalhes dos dados da fonte de entrada.
Nosso método deve ler a mensagem deExchange, colocar o conteúdo em letras maiúsculas e, em seguida, definir o novo conteúdo de volta no objetoExchange:
public class FileProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
String originalFileContent = (String) exchange.getIn().getBody(String.class);
String upperCaseFileContent = originalFileContent.toUpperCase();
exchange.getIn().setBody(upperCaseFileContent);
}
}
Este método de processo será executado para cada entrada recebida da fonte.
3.3. Processador Minúsculo
Agora vamos adicionar outra saída à nossa rota Camel. Desta vez, converteremos os dados do mesmo arquivo de entrada em minúsculas. Desta vez, não usaremos um processador customizado; usaremosMessage Translator feature do Apache Camel. Esta é a rota Camel atualizada:
${body.toLowerCase()}
4. Executando o aplicativo
Para que nossas rotas sejam processadas, basta carregar o arquivo de contexto Camel em um contexto de aplicativo Spring:
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("camel-context.xml");
Depois que a rota for executada com sucesso, dois arquivos serão criados: um com conteúdo em maiúsculas e outro com conteúdo em minúsculas.
5. Conclusão
Se você estiver fazendo um trabalho de integração, o Apache Camel pode definitivamente tornar as coisas mais fáceis. A biblioteca fornece componentes plug-and-play que ajudarão a reduzir o código padrão e se concentrar na lógica principal do processamento de dados.
E se quiser explorar os conceitos deEnterprise Integration Patterns em detalhes, você deve dar uma olhada emthis book escrito por Gregor Hohpe e Bobby Woolf, que conceituam os EIPs de forma muito clara.
O exemplo descrito neste artigo está disponível emproject on GitHub.