La aparición de nuevas arquitecturas de software y la necesidad de que exista comunicación entre ellas dieron pie a la aparición de un software que se encargue de solucionar esta problemática. Es donde apache camel aparece en escena haciendo del desafío de la integración de software algo sencillo y transparente.

En este post conoceremos algunos conceptos básicos de Apache camel y su arquitectura. Si queremos entender un poco más sobre los fundamentos de apache camel hace falta conocer que son los patrones de integración empresarial.

Para empezar podemos comparar estos patrones de integración con otros patrones ya conocidos como por ejemplo estrategy, singleton y factory. Estos patrones son una forma de organizar una solución a un determinado problema, pero no son en sí mismos soluciones. Nos ayudan a estructurar mejor nuestro código de forma reusable y evita que perdamos tiempo en soluciones a problemas conocidos y ya resueltos. Con este mismo objetivo se crearon los patrones de integración empresarial.

Básicamente proponen diseñar nuestras soluciones basadas en componentes que se comunican entre si utilizando mensajes de entrada y de salida.

Para dejar un poco más en claro esto podemos ver un ejemplo de una ruta camel con la que podemos integrar dos aplicaciones utilizando Apache Camel con Spring boot.

En este ejemplo suponemos que hay dos aplicaciones que manipulan datos de empleados. Una está montada sobre un api Rest por lo que solo conoce de Json y la otra sobre el protocolo SOAP por lo que solo conoce de XML.

Lo primero que debemos hacer es agregar la dependencia de camel a el pom de nuestro proyecto:

  <dependency>
     <groupId>org.apache.camel</groupId>
     <artifactId>camel-spring-boot-starter</artifactId>
     <version>2.17.3</version>
  </dependency>

Luego declarar una clase que extienda de RouteBuilder y sobre escribir el método configure con la ruta que va a implementar la transformación de Json a Xml para comunicar las dos aplicaciones. 

public class JsonToXmlIntegractionRoute extends RouteBuilder {
    public void configure() throws Exception {
        
	from("direct:employeejson2xml")
           .unMarshal().xmljson()
	   .setHeader(CxfConstants.OPERATION_NAME, constant("PostEmployee"))
	.to("cxf://http://applicationSoap/api/Employee")
		
    }
}

¡Listo!, Spring boot levanta el contexto camel automáticamente al correr la aplicación por lo que queda disponible la ruta employeeJson2xml.

Los parámetros enviados al invocar esta ruta se reciben en un mensaje compuesto por un header y un body. Este mensaje sufre las transformaciones de los procesos unMarshal y xmljson.

 

 

En el body queda el XML que antes era un Json. Luego el componente cxf recibe el mensaje que va a ser enviado a la aplicación SOAP. Para esto antes se le agrego una propiedad al header del mensaje para indicarle al componente que operación realizar en el servicio.

Eso es todo, ya tenemos una ruta en camel que integra dos aplicaciones.

Entonces, ¿qué es Apache Camel?

Apache Camel es un framework Java de código abierto que se enfoca en hacer que la integración de software sea más fácil y más accesible. Implementa todos los patrones de integración empresarial, posee conectividad con una gran variedad de protocolos de transporte y soporta DSL (lenguaje especifico de dominio) para hacer más sencillo de implementar.

Si tomamos como ejemplo al patrón MVC para entender camel podemos observar que la teoría MVC es bastante simple y podríamos hacer nuestras propias implementaciones sin ayuda de ningún marco pero sin embargo existen varios frameworks de MVC que nos proporciona todas las herramientas necesarias que se necesitan para desarrollar un proyecto MVC facilitándonos gran parte del trabajo. Eso es exactamente lo que Apache Camel es para los Patrones de integración empresarial. Es framework listo para desarrollar soluciones de integración de software implementando EIP.

Arquitectura

La arquitectura Camel se basa en tres partes fundamentales: motor de integración y ruteo, procesos y componentes. Esto se ilustra en la siguiente figura:

architecture

El módulo de Componentes proporciona una interfaz para comunicarse con el mundo externo a través de endpoints que se especifican como URI.

El módulo de Procesadores se utiliza para gestionar y mediar mensajes entre endpoint. Los Patrones de integración empresarial se implementan en este módulo.

Los procesos y los componentes se conectan en el módulo de motor de integración y ruteo. En estas conexiones se puede filtrar mensajes basado nos en criterios definidos por el usuario. Existen varias opciones para escribir estas reglas. Se puede usar Java, Scala, Groovy o incluso XML.

Bueno eso es todo por ahora. La idea de este post es introducirnos a los fundamentos y conceptos básicos de Apache Camel para en un siguiente post meternos de lleno en esta tecnología.

¡Hasta el próximo post! 

Mandanos tus sugerencias

Ayudanos con ideas para los artículos de este blog a contacto@somospnt.com

¡Seguínos en nuestras redes sociales para enterarte de los últimos posts!