Idempotencia

Idempotencia (Reintentos al enviar mensajes)

Todo mensaje que envías a través de la API tiene uno o más identificadores (message_id y en ciertos mensajes también shinkansen_message_id) como parte de su cabecera (header). Esto permite que se pueda enviar el mismo mensaje más de una vez sin que eso sea problema.

Esto es últil cuando el emisor de un mensaje no está seguro si el receptor lo procesó exitosamente. Por ejemplo, cuando falla la red justo entre el envío del mensaje y la recepción del status code de respuesta.

En esos casos, el emisor del mensaje puede simplemente reenviar la misma petición. Según lo que haya pasado en el lado receptor, ocurrirá una de las siguientes cosas:

  • El receptor podrá procesar el mensaje si es que no lo había procesado antes (por ejemplo, el fallo de red ocurrió antes de recibir la petición).

  • El receptor descartará el mensaje porque ya había procesado antes un mensaje del mismo emisor con el mismo identificador. La respuesta indicará que el mensaje había sido procesado e incluirá también la respuesta original. En el caso del API Rest, esto se indica mediante el código HTTP 409 (Conflict).

Nota que la idempotencia funciona idealmente a nivel de mensajes, no de transacciones.

Si envías el mismo id de transacción en un mensaje B que ya había sido incluida en un mensaje A y el mensaje A había sido procesado por Shinkansen, entonces el mensaje B será rechazado completamente con todas las transacciones que incluya. Por eso recomendamos que siempre reintentes con exactamente el mismo mensaje y las mismas transacciones contenidas en el mensaje.

Última actualización