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 #6
falla simplemente debido a la red: el trabajo se ha ejecutado correctamente, pero A
no 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
#1
marcar enA
que la unidad de trabajo, es decir, el cambio está a punto de comenzar - solo
B
puede desmarcar este estado. A
puede obtener información sobreB
cualquier 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?