¡Bienvenido a un nuevo post de la sección WSO2 ESB! En este tutorial aprenderéis paso a paso cómo instalar el contenedor Docker en WSO2 ESB y así trabajar de forma más elegante y limpia en tu empresa.
Introducción
En esta ocasión vamos a desplegar los ejemplos usando un contenedor: Docker.
Éste es uno de los más extendidos y usados por WSO2 en sus servidores. Una manera de trabajar mucho más elegante y limpia, a diferencia de instalarlo todo en el entorno local.
Además con esta herramienta, podemos virtualizar redes donde poder desplegar distintos contenedores de WSO2.
La idea es descargar de WSO2 un contenedor con el Enterprise Integrator (ESB incluido). Para ello antes de nada debemos instalar Docker Common Edition. Es este ejemplo utilizaremos Ubuntu como plataforma para la instalación.
En cuanto a la configuración del ESB incluido dentro del EI vamos a aprender cómo manejar errores con secuencias definidas en el atributo onError de una secuencia, donde el cliente envía un mensaje al backend a través del ESB (dentro del EI). Se prueban tres casos de uso: cuando la mediación tiene éxito, cuando no lo tiene y no se maneja o gestiona el error, y cuando se gestiona el fallo del mensaje.
Instalación de Docker CE en Ubuntu
Instalar Docker a través del repositorio
Antes de instalar Docker CE por primera vez en una nueva máquina host, deberás configurar el repositorio de Docker. Después, ya podrás instalar y actualizar Docker desde el repositorio.
-
CONFIGURAR EL REPOSITORIO
1.Actualiza el índice del paquete apt:
2. Instala paquetes para permitir que apt use un repositorio sobre HTTPS:
3. Agrega la llave GPG oficial de Docker:
4. Verifica que tengas la clave con la huella digital 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, buscando los últimos 8 caracteres de la huella digital:
5. Utiliza el siguiente comando para configurar el repositorio estable. Siempre lo necesitarás , incluso si deseas instalar compilaciones desde el edge o los repositorios de test también. Para agregar el edge o el repositorio de test, agrega la palabra edge o test (o ambas) después de la palabra stable en los comandos a continuación.
-
INSTALAR DOCKER CE
- Actualiza el índice del paquete apt.
- Instala la última versión de Docker CE.
3. Verifica que Docker CE esté instalado correctamente ejecutando la imagen de hello-world.
Este comando descarga una imagen de prueba y la ejecuta en un contenedor. En el momento que el contenedor se ejecuta, se imprime un mensaje informativo. ¡Ahora Docker CE está instalado y funcionando!
Para ver la imagen que descargó Docker:
Para ver el contenedor que se creó para ejecutar la imagen:
Al ejecutar un contenedor si no se especifica el nombre del mismo, Docker genera un nombre aleatorio por defecto.
Ahora es el momento de descargar el contenedor del Enterprise Integrator desde WSO2.
Instalación del Enterprise Integrator container
Descarga y ejecución
Para ello debemos ir al repositorio de Docker oficial de WSO2, lugar donde encontramos una lista de contenedores.
Elegimos WSO2-EI Enterprise Integrator y pulsamos en Details.
En la siguiente pantalla aparece la línea de comandos a usar para descargar el Contenedor y una lista de tags con las distintas versiones del EI. Nosotros usaremos la última versión.
Para ello primeramente nos debemos logear en el repositorio Docker de WSO2 usando las credenciales que tengamos en la web de WSO2. Si no tienes credenciales debes crearte una cuenta en esa web.
Ahora debes descargar el contenedor del EI:
$ docker pull docker.wso2.com/wso2ei-integrator:latest
Si quieres ver la imagen del EI teclea: $ docker image ls
Ahora ejecutamos la imagen en un Container y debes teclear:
$docker run -d -p 8280:8280 -p 8243:8243 -p 9443:9443 –name wso2ei docker.wso2.com/wso2ei-integrator:latest
El formato es: docker run -d <mapeo_puertos> –name <container_name> <image_name>
-d: significa detached mode.
Parámetros y mapeo de puertos
Docker publica o mapea los puertos de la siguiente manera: puerto-del-host:puerto-del-container, en nuestro ejemplo: -p 8280:8280
Es decir, las requests que van dirigidas al puerto 8280 en el Host, Docker las redirige al 8280 en el Contenedor.
-Descubre el primer tutorial de la sección ESB: Apache Synapse Enterprise Service Bus (ESB) y WSO2-
Acceso a la consola del EI y comandos importantes de Docker.
Ahora puedes ir a la consola de administración en el browser: https://localhost:9443/carbon
Los detalles del contenedor que se está ejecutando aparecen con esta orden:
$ sudo docker container ls
Como se puede apreciar aparece información del identificador del contenedor, la imagen que ejecuta el container, el comando que ejecuta el servidor de WSO2 en el Contenedor, cuando fue creado el contenedor, su estatus (si se está ejecutando o está parado), el mapeo de los puertos y el nombre del contenedor. Si no le hemos puesto ninguno Docker elige uno al azar.
Para parar el contenedor: $ docker container stop <container_name>
Nota: Si se ejecuta de nuevo el contenedor con el comando run se crea otro contenedor igual al primero.
Conectarse al container donde está desplegado el EI es algo tan sencillo como teclear:
$ docker container exec -it adoring_vaughan bash
-it: significa, [i]nteractive, Asigna un pseudo-TTY,
[t] tty, Mantiene STDIN abierto incluso si no está conectado.
La conexión a la línea de comandos del container donde se está ejecutando el EI, se realiza con esta orden:
$ docker container exec -it <container_name> bash
Para abrir una shell como root: $ docker exec -u 0 -it <container_name> bash
A partir de aquí ya puedes acceder al EI para crear las secuencias a través del browser o explorador y a la línea de comandos para enviar las requests dentro del container.
Configuración del ESB
En la configuración del ESB se utiliza una secuencia principal por donde se procesan los mensajes entrantes provenientes del servicio Cliente. Dependiendo del valor del tag symbol del mensaje de la request, se envía el mensaje a un punto final distinto.
-No te pierdas este post: “ESB como primer paso para una implementación SOA”-
El primer punto final, cuando el symbol es IBM funciona correctamente. El segundo punto final no está definido en el ESB, por tanto se genera un error y se ejecuta la secuencia de error por defecto llamada ‘fault’. El tercer punto final, que no está definido tampoco, envía el mensaje a una secuencia desde donde sí que se gestionan esta vez los errores a través de la secuencia ‘sun ErrorHandler’.
Cómo funciona
El siguiente diagrama muestra cómo funciona la configuración del ESB:
Probando la configuración.
Desde el cliente AXIS2 se envían tres requests de ejemplo para probar el comportamiento de la gestión de errores de Synaps.
-
Caso de uso 1: Punto final definido.
$ ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=IBM
Request enviada por el Cliente:
En la request se puede comprobar que el valor del tag symbol es IBM. El valor coincide con el de la expresión regular del primer case de la secuencia ESB. Por tanto, se envía el mensaje al punto final SimpleTockQuoteService.
La respuesta del backend es la siguiente:
Y el valor que visualiza el cliente es: 87.5990
-
Caso de uso 2: Punto final y gestión del error no definido.
$ ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT
Request enviada por el Cliente:
En este caso el símbolo por el que se busca la última cotización es MSFT.
El inconveniente es que el punto final para ese valor no está correctamente configurado en el EI y se produce un error. ¡El ESB no es capaz de encontrar el punto final!
Como no hay una secuencia de error definida para la secuencia que procesa la request del símbolo seleccionado, secuencia main,se ejecuta la secuencia de error por defecto que es la más cercana a la secuencia donde se ha producido el error. El servidor EI visualiza en su archivo de logs el mensaje de error y destruye el mensaje.
-
Caso de uso 3: Punto final no definido y gestión del error definida.
$ ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=SUN
Request enviada por el Cliente:
En esta request el punto final no está definido pero sí que lo está la secuencia que gestiona el error. En este caso es la sunErrorHandler.
El mensaje de error que visualiza el middleware es:
Conclusión
La virtualización de servidores es algo que debe aprender y conocer muy bien el desarrollador de integración. Es la mejor manera de virtualizar el comportamiento de servidores de un entorno real donde hay diferentes máquinas repartidas entre distintas redes y tener así un entorno virtual lo más parecido al real.
De esta forma nos facilita la resolución de problemas sin complicaciones, ya que nos brinda la posibilidad de la replicación del caso de uso en el entorno en el que ha aparecido un error, en esta ocasión con los containers en un entorno virtual. Tal y como has podido comprobar, Docker nos da esa facilidad, siendo mucho menos pesado que VirtualBox ya que Docker no necesita un SO invitado (Guest OS) donde poderse ejecutar, solo el motor de Docker.
En el siguiente diagrama aparece una comparativa entre máquinas virtuales y Docker.
Debes saber que los contenedores son solo procesos, limitados a qué recursos pueden acceder y existen cuando el proceso se detiene.
Antes de finalizar es importante destacar que EI hace posible la gestión de errores con la opción de escribir secuencias que las gestionen. De este modo es mucho más sencillo seguirle la pista a los problemas que surjan en el middleware o en los backends.
Ahora que ya conoces cómo manejar los errores y cómo Docker puede convertirse en el mejor contenedor (¡y aliado!) no hay tiempo que perder para poner en marcha todos los consejos aprendidos en este WSO2 Tutorial. Si necesitas un poco de ayuda en tus comienzos, contacta con nuestros asesores sin compromiso.
Si te ha gustado este post sobre docker en WSO2 no olvides echarle un vistazo al pasado tutorial: WSO2 ESB Tutorial: Entradas en el registro local, puntos finales reutilizables y secuencias, ¡seguro que también te resulta tan enriquecedor como este! Nos leemos en el siguiente.