Ya estuvimos viendo cómo hacer un microservicio fácilmente con Ballerina y Micro Gateway, el cual si quieres puedes ver de nuevo aquí. En el ya remarcamos la importancia de las nuevas tecnologías y el uso de las mismas para realizar un un desarrollo ágil y que permitan fácilmente la escalabilidad. Hoy realizaremos algo parecido pero centrándonos en el desarrollo con el Micro Integrator.
Características de Micro Integrator
El Micro Integrator es el producto, basado en el Enterprise Integrator que nos permitirá la creación de APIs, servicios SOAP o servicios de accesos a base de datos. A través de una arquitectura que permite tanto el despliegue nativo como en el orientado a la nube. Pero sobre todo nos provee de una plataforma de integración realmente ligera.
A continuación listamos las características más importantes, las cuales nos ayudarán a elegir al Micro Integrator como nuestra plataforma para el desarrollo de integraciones, incluso por delante de productos propios de WSO2, como el Enterprise Integrator:
- Tiempo de inicio muy bajo.
- Consumo de memoria minimizado.
- Servicios inmutables, frente a los del Enterprise Integrator que permiten despliegue en caliente.
- Pensado para el diseño de integraciones ligeras, y para un despliegue de las integraciones a través de contenedores.
- Clusterización a través de la orquestación entre contenedores.
- Soporte nativo de Kubernetes.
- Configuración en base a fichero TOML.
- Uso del registro a través de ficheros del sistema.
Ejemplo de despliegue de API con Micro Integrator
Tal y como hicimos en el otro post, volveremos a hacer una API muy sencilla, pero con la cual podamos ver con mayor detalle el potencial del Micro Integrator. Y sobre todo cómo podemos realizar ese despliegue a través de contenedores.
Debemos aclarar, que es un ejemplo práctico y no aplicable a entornos productivos. En el caso de que quisiéramos que así fuese, deberíamos complementar el ejemplo con otra herramienta que nos permita acoplar seguridad y control sobre esta API, como puede ser un API Manager o un Micro Gateway de WSO2.
Desarrollo de integraciones en Micro Integrator
Desde WSO2 se indica, que la herramienta para el desarrollo de integraciones es el Integrator Studio. La cual nos guiará a través del desarrollo a través de gráficos modulares y que nos permiten la creación de nuevos componentes a través del drag and drop.
Sin embargo, nosotros no lo vamos a usar para este ejemplo. Mostraremos cómo crear esta integración a través de la edición directa de ficheros. Y el posterior despliegue, a través de la ejecución de comandos. Un enfoque más práctico y realista.
Nuestra integración se compondrá de distintos proyectos:
- Book: Contiene los artefactos propios de la integración.
- BookDataService: Contiene el servicio de acceso a base de datos.
- BookCompositeApplication: Contiene los artefactos a desplegar de todos los proyectos implicados.
- BookDockerExporter: Incluye el Dockerfile para la creación de contenedores.
Empezaremos creando un data service que permita acceder a nuestra base de datos. Este servicio es idéntico a como lo podríamos hacer en el EI.
<data name="library_dataservice" transports="http https local"> <config id="LIBRARY_DS"> <property name="driverClassName">com.mysql.jdbc.Driver</property> <property name="url">jdbc:mysql://mysql-server:3306/library_db</property> <property name="username">root</property> <property name="password">root</property> </config> <query id="select_id_query" useConfig="LIBRARY_DS"> <sql>SELECT ID, NAME, AUTHOR, PUBLICATION FROM BOOK WHERE ID = :id</sql> <result element="books" rowName="book"> <element column="ID" name="ID" xsdType="integer"/> <element column="NAME" name="NAME" xsdType="string"/> <element column="AUTHOR" name="AUTHOR" xsdType="string"/> <element column="PUBLICATION" name="PUBLICATION" xsdType="integer"/> </result> <param name="id" sqlType="INTEGER" /> </query> <resource method="GET" path="/book/{id}"> <call-query href="select_id_query"> <with-param name="id" query-param="id"/> </call-query> </resource> </data>
Por otro lado, crearemos el microservicio, que nos permite acceder a esos datos. Será una API muy sencilla con un solo recurso y que llamará al anterior data service.
<api context="/book" name="bookAPI" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="GET" uri-template="/{bookId}"> <inSequence> <call> <endpoint> <http method="get" uri-template="http://localhost:8290/services/library_dataservice/book/{uri.var.bookId}" /> </http> </endpoint> </call> <respond /> </inSequence> <outSequence /> <faultSequence/> </resource> </api>
A igual que en el caso del data service, si hemos desarrollado con WSO2, podemos ver que las integraciones siguen realizándose de la misma forma. Como nota diferenciadora, están los puertos que se usan. Utilizandose el 8290 para HTTP y el 8253 para HTTPS.
Por último, solo nos quedaría configurar ambos artefactos en el proyecto del Composite Application. Incluyendo el dataservice y la API REST.
Creación del contenedor con Docker
En este apartado vamos a indicar como realizar la parte más novedosa del desarrollo y sobre todo el despliegue con contenedores.
Para ello debemos configurar el Dockerfile del proyecto BookDockerExporter. La configuración por defecto, es bastante básica y tampoco requiere de grandes conocimientos sobre Docker.
FROM wso2/micro-integrator:latest COPY BookCompositeApplication_1.0.0.car /home/wso2carbon/wso2mi/repository/deployment/server/carbonappsCOPY mysql-connector-java-8.0.16.jar /home/wso2carbon/wso2mi/lib/
Una vez completo el Dockerfile, generamos la imagen con el siguiente comando de Docker:Por un lado indicamos la imagen del Micro Integrator en la cual nos vamos a basar. Y por otro lado los volúmenes de dicha imagen. Los cuales nos permitirán indicar las librerías o ficheros de configuración que modificarán la imagen original.
docker build -t chakray/book-api-mi .
Despliegue y ejecución
Ya solo tendremos que descargar la imagen creada en el servidor en el cual queramos desplegar nuestra integración. Ejecutando un único comando Docker:
docker run -p 8290:8290 -p 9164:9164 chakray/book-api-mi:latest
Y para invocarlo nos valdrá el siguiente comando
http://localhost:8290/book/1
Aquí hemos visto una pequeño ejemplo de lo fácil y sencillo que es crear microservicios con WSO2 y el nuevo Micro Integrator. Utilizando tecnologías novedosas y facilitando el trabajo de despliegue en la nube.