Esta é a sequência comum de dois componentes distribuídos em nosso aplicativo 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 é o cenário ideal, supondo que tudo funcione. Obviamente, a vida real é cheia de falhas. Por exemplo, um dos piores casos pode ser se #6
falhar simplesmente por causa da rede: o trabalho foi executado corretamente, mas A
não sabe nada sobre ele.
Estou procurando uma abordagem leve sobre como gerenciar erros neste sistema. Observe que temos muitos componentes; portanto, agrupar todos eles apenas por causa do tratamento de erros não faz sentido. Em seguida, abandonei o uso de qualquer memória / repositório distribuído que seria novamente instalado em cada componente pelo mesmo motivo.
Meus pensamentos estão indo na direção de ter um estado absoluto em um B e nunca ter um estado persistente em um A
. Isso significa o seguinte:
- antes de
#1
marcarmosA
que a unidade de trabalho, ou seja, a mudança está prestes a começar - somente
B
pode desmarcar esse estado. A
pode buscar informações sobre aB
qualquer momento, para atualizar o estado.- nenhuma nova alteração na mesma unidade pode ser ativada
A
.
O que você acha? Existe alguma maneira leve de domar os erros neste sistema?