Usando Apache Camel con Spring

1. Información general

Este artículo demostrará cómo configurar y usar Apache Camel con Spring.

Apache Camel proporciona una gran cantidad de componentes útiles que admiten bibliotecas como JPA, Hibernate, FTP, Apache-CXF, AWS-S3 y, por supuesto, muchos otros, todo para ayudar a integrar datos entre dos sistemas diferentes.

Por ejemplo, utilizando los componentes Hibernate y Apache CXF, puede extraer datos de una base de datos y enviarlos a otro sistema mediante llamadas a la API REST.

En este tutorial, repasaremos un ejemplo simple de Camel: leer un archivo y convertir su contenido a mayúsculas y luego de nuevo a minúsculas. Usaremos el componente File de Camel y Spring 4.2.

Aquí están los detalles completos del ejemplo:

  1. Leer archivo del directorio de origen
  2. Convierta el contenido del archivo a mayúsculas con un procesador personalizado
  3. Escribe la salida convertida en un directorio de destino
  4. Convierta el contenido del archivo a minúsculas con Camel Translator
  5. Escribe la salida convertida en un directorio de destino

2. Agregar dependencias

Para usar Apache Camel con Spring, necesitará las siguientes dependencias en su archivo 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}  

Entonces tenemos:

  • camel-core : la principal dependencia de Apache Camel
  • camel-spring - nos permite usar Camel con Spring
  • camel-stream : una dependencia opcional, que puede usar (por ejemplo) para mostrar algunos mensajes en la consola mientras se ejecutan las rutas
  • spring-context : la dependencia estándar de Spring, requerida en nuestro caso, ya que vamos a ejecutar rutas Camel en un contexto Spring

3. Contexto de Spring Camel

Primero, crearemos el archivo Spring Config donde luego definiremos nuestras rutas Camel.

Observe cómo el archivo contiene todos los espacios de nombres y ubicaciones de esquema de Apache Camel y Spring necesarios:

los El elemento representa (como era de esperar) el contexto Camel, que se puede comparar con un contexto de aplicación Spring. Ahora su archivo de contexto está listo para comenzar a definir rutas Camel.

3.1. Ruta del camello con procesador personalizado

A continuación, escribiremos nuestra primera ruta para convertir el contenido del archivo a mayúsculas.

Necesitamos definir una fuente desde la cual la ruta leerá datos. Puede ser una base de datos, un archivo, una consola o cualquier número de otras fuentes. En nuestro caso, será archivo.

Luego, necesitamos definir el procesador de los datos que se leerán desde la fuente. Para este ejemplo, vamos a escribir una clase de procesador personalizada. Esta clase será un bean Spring que implementará la interfaz estándar del procesador Camel.

Una vez que se procesan los datos, debemos indicar la ruta hacia dónde dirigir los datos procesados. Una vez más, este podría ser uno de una amplia variedad de resultados, como una base de datos, un archivo o la consola. En nuestro caso, lo vamos a almacenar en un archivo.

Para configurar estos pasos, incluida la entrada, el procesador y la salida, agregue la siguiente ruta al archivo de contexto de Camel:

Además, debemos definir el bean myFileProcessor :

3.2. Procesador de mayúsculas personalizado

Ahora necesitamos crear el procesador de archivos personalizado que definimos en nuestro bean. Debe implementar la interfaz del procesador Camel , definiendo un método de proceso único , que toma un objeto de Exchange como entrada. Este objeto proporciona los detalles de los datos de la fuente de entrada.

Nuestro método debe leer el mensaje de Exchange , poner el contenido en mayúsculas y luego volver a establecer ese nuevo contenido en el objeto de Exchange :

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 proceso se ejecutará para cada entrada recibida de la fuente.

3.3. Procesador de minúsculas

Ahora agregaremos otra salida a nuestra ruta Camel. Esta vez, convertiremos los datos del mismo archivo de entrada a minúsculas. Sin embargo, esta vez no utilizaremos un procesador personalizado; Usaremos la función de traductor de mensajes de Apache Camel. Esta es la ruta Camel actualizada:

     ${body.toLowerCase()}   

4. Ejecución de la aplicación

Para que nuestras rutas sean procesadas, simplemente necesitamos cargar el archivo de contexto de Camel en un contexto de aplicación Spring:

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("camel-context.xml"); 

Una vez que la ruta se haya ejecutado correctamente, se habrán creado dos archivos: uno con contenido en mayúsculas y otro con contenido en minúsculas.

5. Conclusión

Si está realizando un trabajo de integración, Apache Camel definitivamente puede facilitar las cosas. La biblioteca proporciona componentes plug-and-play que lo ayudarán a reducir el código repetitivo y a concentrarse en la lógica principal del procesamiento de datos.

Y si desea explorar los conceptos de Patrones de integración empresarial en detalle, debería echar un vistazo a este libro escrito por Gregor Hohpe y Bobby Woolf, quienes conceptualizan los EIP de manera muy clara.

El ejemplo descrito en este artículo está disponible en un proyecto en GitHub.