Introducción a Apache Synapse ESB.
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. Características de Apache Synapse.
- 4. Instalación.
- 5. Ejecutando un ejemplo.
- 6. Referencias.
- 7. Conclusiones.
1. Introducción
La arquitectura SOA (arquitectura orientada a servicios) nace ante la creciente necesidad de reutilizar diferentes servicios para dar soporte a diferentes procesos de negocio. De esta forma es posible construir sistemas escalables con independencia de la tecnología en la que se basan dichos servicios. La funcionalidad ya no estará replicada en diferentes aplicaciones sino que será proporcionada por un único servicio (o la combinación de un conjunto de ellos).
Sin embargo, la gestión de diferentes servicios puede ser una tarea compleja a medida que éstos van aumentando. Nace la necesidad de un mediador de servicios que asuma la responsabilidad de secuenciar dichos servicios y de tratar la información que consumen o proveen. Ante esta necesidad surgen los «buses ESB» que se ocupan de modelar procesos de negocio mediante la orquestación de servicios además de proporcionar mucha otra funcionalidad adicional al sistema.
En este tutorial vamos a intentar explicar qué es Apache Synapse ESB, sus características, cómo se instala y un ejemplo de funcionamiento.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15′ (2.2 Ghz Intel Core I7, 8GB DDR3).
- Sistema Operativo: Mac OS Snow Leopard 10.6.7
- Apache Synapse 2.0.
- Apache Ant 1.8.2.
3. Características de Apache Synapse.
Entre las principales características de Apache Synapse ESB destacan:
- Es un ESB ligero que soporta la mayoría de la funcionalidad de los modelos de ESB teóricos.
- Es sencillo de configurar y usar, además de estar mejor documentado que otras soluciones ESB Open Source.
- Soporta mediación de servicios, permitiendo partir de un protocolo de entrada y transformarlo en otro para adaptarlo a los servicios que comuniquen en el otro lado del ESB.
- Tiene un tipo de arquitectura en BUS, orientado a la comunicación de servicios, donde actúa de plataforma de integración para todos los servicios.
- Otra característica interesante de este ESB es la posibilidad de enrutamiento dinámico a través de XPath, donde un mensaje puede tener un enrutamiento diferente según su estructura.
- También soporta transformación de datos con XSLT, por lo que un mensaje de entrada puede cambiar de estructura y contenido según se requiera.
- Todos los recursos se manejan en un repositorio común, donde los servicios comparten ficheros de endpoints, plantillas de transformación XSLT…
- La parte de monitorización la delega en los logs de sistema, pero también existen herramientas Open Source que, bajo la licencia Apache, han modificado Synapse, convirtiéndolo en una herramienta gráfica y más fácil de monitorizar, como es el caso de WSO2 Carbon.
4. Instalación.
Lo primero que debemos hacer es descargar la distribución deseada en http://synapse.apache.org/download.html. En el momento de escribir este tutorial la última versión es la 2.0, por tanto elegiremos esa.
A continuación, descomprimimos el archivo que hemos descargado en el directorio deseado. En nuestro caso, nos creará en dicho directorio, otro directorio llamado synapse-2.0.0. Si nos metemos dentro encontraremos una estructura de directorios como la que se muestra a continuación:
Los principales directorios son:
- bin: Donde se encuentran los ejecutables para arrancar la aplicación.
- repository: Es el directorio más importante a nivel de despliegue y desarrollo. En esta carpeta se configuran los «samples» que van a indicar cómo se va a comportar el ESB a nivel funcional y también se almacenan todos los ficheros del repositorio.
- repository/conf/sample: Aquí se almacenan dichos «samples».
- repository/conf/sample/resources: Repositorio de archivos (endpoints, xquery, xpath, xslt…).
- logs: Archivos de monitorización.
- docs: Documentación de Synapse.
Synapse se basa en «samples», que son los ficheros donde se configurará el comportamiento del bus en la mediación de servicios. En la distribución vienen incluidos una gran cantidad de «samples» que configuran, a modo de ejemplo, diferentes funcionalidades.
5. Ejecutando un ejemplo.
Vamos a ejecutar un ejemplo en el que utilizaremos el ESB como un proxy por el que pasarán las peticiones de un cliente que quiere consumir un servicio. Por tanto necesitaremos tres actores: un servicio, un cliente que consuma ese servicio y Synapse que hará de proxy.
La propia distribución de Synapse viene ya con un cliente y un servicio para usar a modo de ejemplo. Es un servicio llamado SimpleStockQuoteService que proporciona operaciones para conocer la cotización de valores.
El servicio utiliza el motor de Axis2 para ejecutarse. Para desplegarlo vamos al directorio de Synapse (<synapse_home>) y en el sub-directorio samples/axis2Server/src/SimpleStockQuoteService encontramos el servicio de ejemplo. Observamos que hay un fichero build.xml por lo que ejecutamos el comando: ant , y nos montará el servicio a modo de .aar.
Para levantar el servicio vamos al directorio <synapse-home>/samples/axis2Server y ejecutamos ./axis2server.sh (.bat en Windows) y tendremos lanzado el servicio en el puerto 9000, en concreto en http://localhost:9000/services/SimpleStockQuoteService.
Lo siguiente que debemos hacer es arrancar Synapse para que funcione como proxy con este servicio registrado. Este comportamiento viene ya incluido en un sample de los que vienen en la distribución de Synapse. El sample en cuestión es: <synapse_home>/repository/conf/sample/synapse_sample_150.xml
<definitions xmlns="http://ws.apache.org/ns/synapse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ws.apache.org/ns/synapse http://synapse.apache.org/ns/2010/04/configuration/synapse_config.xsd"> <proxy name="StockQuoteProxy"> <target> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> <outSequence> <send/> </outSequence> </target> <publishWSDL uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/> </proxy> </definitions>
Lo que hace la anterior configuración del sample es definir un proxy donde se especifica un endpoint donde irán las peticiones que reciba el bus. El tag publishWSDL especifica el WSDL relativo al servicio. A continuación lo veremos mejor…
Pues bien, vamos a arrancar Synapse para que tenga el comportamiento definido por este sample (sample 150). Synapse arranca en el puerto 8280 para peticiones http. Para ello vamos al directorio <synapse_home>/bin y ejecutamos.
./synapse.sh -sample 150
Si abrimos un navegador y escribimos http://localhost:8280/services/StockQuoteProxy?wsdl veremos el WSDL del servicio (SimpleStockQuoteService), pero el puerto no es el 9000 (Axis2 Server) sino el 8280 (Synapse), por lo que las peticiones pasarán por el ESB antes de llegar al servicio.
Pues bien, ahora sólo nos falta un cliente que haga una petición utilizando el bus que tenemos arrancado. Para ello vamos al directorio <synapse-home>/samples/axis2Client y ejecutamos
ant stockquote -Dtrpurl=http://localhost:8280/services/StockQuoteProxy -Dmode=quote -Dsymbol=IBM
Lo que hacemos es lanzar una petición, a través del bus, al servicio que queremos consumir, en concreto a la operacion getQuote (que podemos ver en el .wsdl). Observamos que obtenemos la siguiente respuesta:
[java] Standard :: Stock price = $73.93312795033262
6. Referencias.
7. Conclusiones.
En este tutorial hemos comentado la importancia de los ESB´s en una arquitectura SOA. Hemos visto las principales características de Apache Synapse, solución ESB Open Source.
Aunque en el ejemplo hemos visto como utilizar Apache Synapse como proxy, nótese que puede realizar muchísima más funcionalidad, pero sería imposible describirla en un tutorial.
Espero que este tutorial os haya sido de ayuda. Un saludo.
Miguel Arlandy
Dedicado a Daniel Ch. y Eduardo V.