Como lidar com situações, quando o modelo de leitura ficou fora de sincronia com os logs do evento?

StackOverflow https://stackoverflow.com/questions/4238806

  •  26-09-2019
  •  | 
  •  

Pergunta

Quando os instantâneos de agregados ficaram fora de sincronia com o log de eventos, posso simplesmente reproduzir meus eventos de instantâneos iniciais (que deveriam estar sincronizados). O mesmo que posso fazer quando adicionar/remover novos campos ou quando modifico a lógica dos manipuladores existentes.

Caso eu precise adicionar um novo modelo de leitura (ou seja, uma nova visualização de relatório), posso fazer o mesmo novamente - vou reproduzir meus eventos.

Mas como devo lidar com a situação, quando o modelo de leitura ficou fora de sincronia com o log de eventos? O armazenamento de eventos e publicação está em uma transação, mas a atualização do modelo de leitura ocorreu em outra transação, que pode falhar. Repetir eventos desde o início pode ajudar, mas pode levar a eternidade. Preciso de um conceito de instantâneos para todo o modelo de leitura?

Como você resolve este problema? Obrigada.

Foi útil?

Solução

Qual seria o motivo do fracasso no manipulador de eventos? Quanto tempo dura a "eternidade"?

Leia as atualizações do modelo raramente falham (diferentemente dos manipuladores de comando), pois a lógica interna é extremamente simples. É provável que as falhas sejam causadas por problemas transitórios (interrupção de IO/rede) e seriam tratados automaticamente pelo barramento de mensagens.

No entanto, se o modelo de leitura foi corrompido por algum motivo, a maneira mais fácil de redefini -lo e transmitir eventos. Mesmo milhões de eventos levariam tempo razoavelmente pequeno. Além disso, você sempre pode usar a abordagem de redes de mapa.

Eu recomendaria a introdução de instantâneos para ler modelos. Eu acho que isso apenas complica a arquitetura sem ganhos significativos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top