En este artículo aprenderemos cómo reutilizar para vuestros desarrollos, secuencias y puntos finales mediante la clave nombre de cada uno de ellos.
-Antes de continuar si te perdiste el anterior tutorial, ¡ponte al día ya mismo!-
Configuración del ESB
En el siguiente diagrama se muestra un ejemplo de configuración que hay que desplegar en el ESB. En la definición se usa un LocalEntry o registro local. Dicho registro local actúa como un registro de memoria donde puede almacenar cadenas de texto, cadenas XML y URL. Estas entradas se pueden recuperar de un mediador. Además, se pueden crear directamente en la configuración del Enterprise Service Bus o por medio del Interfaz de Usuario.
-
Cómo funciona
El siguiente diagrama resume todo lo que desarrollaremos:
-WSO2 ESB Tutorial 1: Enrutamiento Simple Basado en el Contenido del Mensaje con Filter Mediator-
En nuestro caso el elemento <localEntry key=”version”>0.1</localEntry> ha generado una zona de memoria con el valor 0.1. Esta entrada en el registro local se puede ver haciendo uso de la interfaz. Para ello, debemos ir a la parte izquierda de la pantalla donde indica ‘Service Bus’, tal y como muestra la imagen.
Si seleccionamos ‘Local Entries’ aparecerá el contenido del registro local:
Inlined Text, almacena una entrada de texto sin formato, y si pulsamos ‘Edit’ podremos ver su contenido:
-
Probando la configuración.
Ahora podemos probar la configuración del ESB. Para ello lo primero que debemos hacer es arrancar el backend, y para iniciar el servidor AXI2Server:
wso2esb-4.9.0/samples/axis2Server$ ./axis2server.sh
Tras esto, para enviar la request desde el cliente debemos ir a:
wso2esb-4.9.0/samples/axis2Client$
Y escribir:
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/
Esta es la request que se envía desde el cliente al ESB:
La request entra por el ‘main’ sequence. La secuencia principal actúa como punto de entrada predeterminado para los mensajes recibidos por Synapse. En esa secuencia se crea una propiedad ‘direction’ con el valor ‘incoming’. A continuación se hace una llamada a la secuencia ‘stockquote’, definida como secuencia independiente con un nombre y por tanto reutilizable. Esta secuencia imprime por consola el valor de la propiedad: Text, version (definida en el LocalEntry), y direction:
La función XPath get-property () puede leer las propiedades de los mensajes locales al mensaje actual, las entradas de registro local o remoto, las propiedades de contexto del mensaje Axis2 y los encabezados de transporte.
Al final de la secuencia se encuentra un mediador que envía la request a un punto final definido anteriormente con el nombre ‘simple’.
La request le llega al punto final y éste retorna la response que pasa por el mediador ‘out’:
Finalmente, el cliente puede visualizar el resultado por la línea de comandos:
Para tener más información en la salida del log por consola es mejor activar el wire log. De este modo tenemos detalles de la cabecera del mensaje y del payload. Para ello,debemos ir a ‘Configure’, ‘Logging’.
El el cuadro de texto ‘Filter Loggers by’, debemos teclear: ‘wire’ y pulsar ‘Contains’. Como podemos observar, aparecen tres tipos de loggers, y tendremos que seleccionar para todos ellos ‘TRACE’, tal y como muestra la siguiente imagen.
Por otro lado, para probar el funcionamiento de la secuencia ‘fault’, podemos parar el backend con Control+c. Después enviar otra request desde el cliente, (como ya mencionamos con anterioridad cómo hacerlo) y observar los logs de la consola del Enterprise Service Bus. Ahora se aprecia cómo se imprimen el valor de las propiedades definidas en esta secuencia: MESSAGE, ERROR_CODE y ERROR_MESSAGE.
Conclusión
Gracias a que las secuencias y puntos finales se pueden etiquetar por su nombre, éstas se pueden reutilizar en distintos puntos de la configuración del Enterprise Service Bus. Hecho que permite aplicar la buena práctica de la reutilización del código y la generación de librerías de secuencias, algo similar a lo que sucede en el mundo de la programación. Además de esto, el ESB tiene la habilidad de crearnos un espacio de memoria definido en el LocalEntry, donde podemos almacenar nuestras variables estáticas y usarlas como variables en el código. Tal y como puedes observar, esto permite aplicar otra buena práctica para no incluir valores estáticos en el código de nuestras configuraciones. Es genial ¿no crees?