Implementación de la idempotencia en microservicios
Implementaremos un ejemplo en modo back-end en el que no es necesario pasar una clave para consumir la API de microservicios. El proceso gestiona automáticamente la idempotencia de la carga útil de la API.
El primer paso para habilitar la idempotencia es modificar la configuración de “Idempotencia” en Idempotencia en el “Devprime_App”. Si no lo ha hecho, debe agregar un segundo estado para que persista la idempotencia.
Parámetros utilizados en la configuración
- El alias indica el estado utilizado en la persistencia de la idempotencia
- La duración se utiliza para establecer la hora del registro de control duplicado del comando.
- El flujo indica el tipo de idempotencia y se puede configurar en “backend” o “frontend”
- Key se usa para establecer una clave requerida en la cabeza en la interfaz de Flow
- El alcance limita el rendimiento de la idepontencia y utiliza los parámetros “all|web|stream”
- La acción establece si el ide será automático o manual con los parámetros “auto|manual”
Creación de un microservicio para usar en el ejemplo
Utilizaremos un microservicio basado en la plataforma Devprime
- Utilice una cuenta activa en Devprime y habilite la CLI de Devprime.
- Inicie los contenedores desde docker (MongoDB, RabbitMQ y Redis)
- Cree la cola orderevents en RabbitMQ.
- Cree un nuevo microservicio de pedido.
Iniciando la configuración de idempotencia
Ajuste de la idempotencia en el interruptor “Devprime_App”
Cambio en la configuración de Idempotencia en la opción “Habilitado” a “verdadero”
code src/app/appsettings.json
|
|
Incluir una segunda persistencia en la tecla “Devprime_State”
En este ejemplo, usaremos un Redis local con una contraseña predeterminada
code .\src\app\appsettings.json
|
|
Inicio de la idempotencia automática en el microservicio
Ahora es el momento de probar la configuración. Antes de iniciar el microservicio, asegúrese de que ha habilitado los contenedores y ha creado la cola en RabbitMQ.
Ejecute la aplicación y publique a través de la API de pedidos
En el siguiente ejemplo, estamos usando un json estándar para la publicación.
|
|
Tenga en cuenta la información de idempotencia en el registro
El proceso de idempotencia entró automáticamente para proteger esta solicitud HTTP sin necesidad de ninguna información del lado del consumidor de la API.
Hacer una segunda publicación idéntica a través de la API de pedidos
Al observar este segundo escenario, ya es posible ver que la idempotencia protegió el microservicio al evitar una inclusión duplicada.
La API ya ha recibido una devolución que rechaza el POST duplicado
Al analizar el Log podemos seguir todo el proceso de idempotencia
Inicio de la idempotencia manual en el microservicio
Devprime le permite ingresar manualmente un método específico que admitirá idempotencia. El primer paso es cambiar la configuración principal y luego ir directamente al método para agregar la configuración.
Cambiar la tecla “Acción” a “Manual”
|
|
Al usar la opción “Acción” como “manual”, si vuelve a ejecutar el microservicio y realiza una publicación duplicada, notará que no se rechazará, porque el proceso automático está desactivado.
Habilitación de la idempotencia en un método
Dado que el proceso ahora es manual, activaremos la idempotencia en cada método a proteger. En el siguiente ejemplo, demostramos esta posibilidad directamente en el adaptador web.
code src\Adapters\Web\Order.cs
Busque la API “Order” en el adaptador web y realice la modificación como se muestra.
|
|
Ejecútelo de nuevo y notará que la función de idempotencia ha funcionado nuevamente, pero solo para POST en la API “/v1/order”.
Más artículos sobre idempotencia
Implementación de la idempotencia en microservicios
Idempotencia en microservicios y APIs REST