Manejo de reintentos en estados no concluyentes

Los reintentos solo se cancelan si una solicitud/respuesta ha sido marcada como completada en el dominio externo (consulte Conceptos). Por lo tanto, podría darse el caso en el que desee reintentar una transacción en múltiples estados, lo que podría incluir solicitudes/respuestas no concluyentes.

En el siguiente ejemplo hemos modelado una solicitud/respuesta en un Dominio Externo, de la cual una es no completante (Completando flag no está marcado) y el otro está completando (es decir, el completando flag está marcado).

Reintentos

El event el comportamiento en este ejemplo simplemente mueve el state basado en la respuesta; ya sea Insufficient Funds o Balance OK, lo que completaría el flujo:

Flujo

Cuando se recibe la Respuesta de Fondos Insuficientes, el state se mueve a Fondos Insuficientes y los reintentos no se detienen porque la respuesta es una respuesta no concluyente. Los reintentos continuarán ocurriendo incluso cuando recibamos la primera Respuesta OK porque ahora estamos en stateFondos Insuficientes pero los reintentos se estaban activando desde stateVerificando Saldo.

Puede detener este intento de reintento una vez que se reciba la respuesta completa configurando las propiedades de reintento de la siguiente manera:

ipf flow. Testflow. CheckingBalance. CheckBalance.initial-retry-interval = 1s
ipf flow. Testflow. CheckingBalance. CheckBalance.max-retries = 0

ipf flow. Testflow. InsufficientFunds. CheckBalance.initial-retry-interval = 1s
ipf flow. Testflow. InsufficientFunds. CheckBalance.max-retries = 3 #or however many attempts
ipf flow. Testflow. InsufficientFunds. CheckBalance.backoff-type = USER_DEFINED
ipf flow. Testflow. InsufficientFunds. CheckBalance.jitter-enabled = false
ipf flow. Testflow. InsufficientFunds. CheckBalance.custom-backoffs = [20s, 40s] #or whatever values you want here

Esta configuración mueve efectivamente las capacidades de reintento a InsufficientFunds.state, y no intentamos ningún reintento en el CheckingBalance state.