Idempotencia

La plataforma Devprime ofrece un enfoque de idempotencia automática que permite controlar comandos duplicados en solicitudes HTTP/gRPC y servicios de transmisión (Kafka, RabbitMQ).

La estrategia de idempotencia se aplica ampliamente para evitar, por ejemplo, el cobro de un pago duplicado recibido en la API. Para visualizarlo mejor, estamos hablando de la solicitud con un comando POST/PUT/PATCH o de un evento que llega duplicado por Stream.

Algunos servicios de Stream envían ocasionalmente mensajes duplicados para garantizar altas velocidades de entrega, lo que obliga a las aplicaciones a controlar la idempotencia.

Devprime ofrece un enfoque muy flexible para la configuración de servicios que puede configurarse para que se inicie automáticamente, por parámetro enviado por el consumidor y/o restringido a procesos específicos según la estrategia de cada microservicio.

La función de idempotencia se puede configurar para que funcione automáticamente utilizando el parámetro “action” como “auto” y el parámetro “flow” como “backend”, habilitando la función sin necesidad de pasar una clave externa al consumir la API.

Para visualizar mejor el escenario en la práctica, es fundamental seguir la secuencia de imágenes donde demostramos todo el proceso en el Log. El registro automático se genera mediante el enfoque de servibilidad nativo.

Hacer la primera publicación en la API de pedidos
Cuando examine el registro, vea la información de idempotencia como activa en esa solicitud, iniciando la protección contra duplicados.

Idempotencia de las capacidades de Devprime

Hacer una segunda publicación en la API de solicitud idéntica a la anterior
Ahora mismo estamos repitiendo el escenario, solo que ahora tendremos otra respuesta en el control de la idempotencia.

Al analizar el resultado de la API, vemos que se rechaza la solicitud duplicada
![Idempotencia de los recursos de Devprime]@@@@5@@@@@

Cuando mire el Registro en la sección de idempotencia, encontrará el “Rechazo”
![Capacidades de Devprime idempotencia]@@@@6@@@

Configuración de idempotencia en dos pasos
La configuración es un proceso simple y personalizable

Habilite la idempotencia en la tecla “Devprime_App” estableciendo el valor “Habilitar” en “verdadero”.

1
2
3
4
5
6
7
8
9
    "Idempotency": {
      "Enable": "true",
      "Alias": "State2",
      "Duration": "86400",
      "Flow": "backend",
      "key": "idempotency-key",
      "Scope": "all",
      "Action": "auto"
    }

Agregue una segunda persistencia de Redis en la clave “Estado” para obtener información de control automático de transacciones de idempotencia.

1
2
3
4
5
6
7
8
9
{
  "enable": "true",
  "alias": "State2",
  "dbtype": "redis",
  "connection": "127.0.0.1:6379,password=LltF8Nx*yo",
  "timeout": "5",
  "retry": "2",
  "durationofbreak": "45"
}

Activación manual de la idempotencia
En los escenarios deseados, puede configurar manualmente la compatibilidad con idempotencia.

1
2
3
4
5
6
7
8
app.MapPost("/v1/order", async (HttpContext http,
IOrderService Service, 
Devprime.Web.ViewModels.Order.Order command) =>
await Dp(http).Pipeline(() =>
        {
            Dp(http).Idempotency.Enable = true;
            Service.Add(command.ToApplication());
        }));

Acabas de comprobar una potente función presente en Devprime Stack. Utilice la plataforma Devprime para acelerar la modernización de sus aplicaciones y el proceso de desarrollo de la plataforma digital.

Más detalles sobre escenarios de deidempotencia
Implementación de la idempotencia en microservicios
Idempotencia en microservicios y APIs REST
Implementación de la idempotencia en microservicios

Última modificación January 10, 2024 (967dcac3)