Implementación de solución asíncrona basada en mensajería

Contenido

Esta implementación es dependiente de la disponibilidad de la Plataforma de eventos. Se puede consultar la fecha de disponibilidad en la hoja de ruta

Se recomienda utilizar esta implementación de la solución de servicios asíncronos cuando la necesidad de implementar un servicio asíncrono sea habitual en el proyecto y estas peticiones se estime que requieran de un mecanismo de errores, validación de la información y gestión de reintentos complejos. En esos casos, la necesidad de integrarse con el broker de mensajería centralizado está justificada y la gestión de la información será más sencilla y fácil de mantener que si se opta por la implementación basada en api asíncrona.

También se recomienda esta solución cuando el proyecto ya posee integración con el broker de mensajería corporativo y por lo tanto, la decisión de incorporar o no esta integración, sea irrelevante.

En esta implementación la petición solicitando información y el procesamiento de la respuesta se hará haciendo uso de mensajes.

Cómo adaptarla a tu caso concreto

Preparación del entorno local de desarrollo

Para configurar el equipo local, lee la guía de desarrollo de microservicios donde verás las herramientas que están a tu disposición y las normas que debes seguir.

Adaptación

Definición del mensaje (si aplica):

Es recomendable, siempre que se manejen mensajes que se encuentran definidos en un formato estructurado como JSON, definir la estructura del mensaje y registrarlo en el registro de esquemas.

  1. Construir la definición de los mensajes mediante la creación de ficheros Avro.
  2. Registrar la definición de los mensajes en Apicurio.

 

Definición del contrato asíncrono (Si aplica):

Cuando una solución asíncrona involucra varios sistemas de información, es necesario registrar la definición del contrato asíncrono en API Manager. No será obligatorio cuando el ámbito de consumo de la solución asíncrona sea de uso interno dentro del mismo sistema de información. El diseño del contrato asíncrono debe seguir los siguientes puntos:

  1. Construir la definición del contrato asíncrono usando AsyncAPI
  2. Registrar la definición de los mensajes en Apicurio.

 

Desarrollo de un productor:

  1. Ejecutar el arquetipo fwk-custom-producer-archetype del framework para generar un microservicio preparado para publicar un productor Kafka
  2. Revisar el microservicio generado y verificar que en el parent-pom los siguientes puntos:
  3. Debe revisarse el fichero application.yml generado por el arquetipo y verificar que la configuración para conectarse con Kafka y Apicurio así como la configuración del propio productor son correctas.
  4. Si existe la definición del mensaje en formato Avro debe añadirse en el microservicio dentro de la carpeta /src/main/resources/avro/ y compilarse el microservicio para que el plugin avro-maven-plugin para que genere el modelo de datos asociado al esquema Avro.
  5. Revisar el código generado por el arquetipo para el productor y adaptarlo al negocio que se necesita implementar.
    • Implementar un sistema de manejo de errores para el productor
  6. Probar el microservicio mediante la realización de test unitarios y de integración con Kafka y Apicurio.

 

Desarrollo de un consumidor:

  1. Ejecutar el arquetipo fwk-custom-consumer-archetype del framework para generar un microservicio preparado para publicar un consumidor Kafka
  2. Revisar el microservicio generado y verificar que en el parent-pom los siguientes puntos:
  3. Debe revisarse el fichero application.yml generado por el arquetipo y verificar que la configuración para conectarse con Kafka y Apicurio así como la configuración del propio consumidor son correctas.
  4. Si existe la definición del mensaje en formato Avro debe añadirse en el microservicio dentro de la carpeta /src/main/resources/avro/ y compilarse el microservicio para que el plugin avro-maven-plugin para que genere el modelo de datos asociado al esquema Avro.
  5. Revisar el código generado por el arquetipo para el consumidor y adaptarlo al negocio que se necesita implementar.
    • Implementar un sistema de manejo de errores para el consumidor
  6. Probar el microservicio mediante la realización de test unitarios y de integración con Kafka y Apicurio.

 

Securización de la solución:

Cuando la solución asíncrona abarque varios Sistemas de Información, dentro o fuera de la red de Junta de Andalucía es necesario securizar la comunicación siguiendo los siguientes pasos:

  1. Configurar correctamente los certificados para conectarse por mTLS a Kafka y Apicurio.
  2. Restringir el acceso a los topic mediante ACL (Access Client List). Para ello:
    • Identificar correctamente todos los clientes que conectarán al topic (productores y consumidores)
    • Definir permisos solo de escritura en los productores y de solo lectura en los consumidores
    • Un mismo microservicio puede tener a la vez productores y consumidores sin embargo cada uno de ellos tendrá su propio identificador que es el que se utilizado en la configuración del ACL.

 

Despliegue de la solución

Para desplegar el microservicio revisa el modelo de despliegue de microservicios.

 

Recursos relacionados

Reglas y pautas

Arquitecturas de referencia

Normas

Activos