Esta es la secuencia común de dos componentes distribuidos en nuestra aplicación Java:
1 A sends request to B
2 B starts some job J in parallel thread
3 B returns response to A
4 A accepts response
5 Job finishes after some time
6 Job sends information to A
7 A receives response from a Job and updates
Este es el escenario ideal, suponiendo que todo funcione. Por supuesto, la vida real está llena de fracasos. Por ejemplo, uno de los peores casos puede ser si #6falla simplemente debido a la red: el trabajo se ha ejecutado correctamente, pero Ano sabe nada al respecto.
Estoy buscando un enfoque liviano sobre cómo administrar los errores en este sistema. Tenga en cuenta que tenemos muchos componentes, por lo que agruparlos todos solo por el manejo de errores no tiene sentido. Luego, abandoné el uso de cualquier memoria distribuida / repositorio que se instalaría nuevamente en cada componente por la misma razón.
Mis pensamientos van en la dirección de tener un estado absoluto en una B y nunca tener un estado persistente en una A. Esto significa lo siguiente:
- antes de
#1marcar enAque la unidad de trabajo, es decir, el cambio está a punto de comenzar - solo
Bpuede desmarcar este estado. Apuede obtener información sobreBcualquier momento para actualizar el estado.- no se puede invocar ningún cambio nuevo en la misma unidad
A.
¿Qué piensas? ¿Hay alguna forma ligera de domar los errores en un sistema de este tipo?