Armazenamento de eventos
O armazenamento de eventos dependerá do seu aplicativo, mas será muito mais fácil se você usar um armazenamento flexível para seus eventos (para um banco de dados NoSQL, JSON ou XML). O modo como você lida com as atualizações dependerá de vários fatores que você precisa levar em conta, como requisitos de disponibilidade e prazos para atualizações, quantidade de eventos, etc.
- Atualize seus eventos quando o aplicativo for atualizado: como parte da implantação de um novo aplicativo, atualize todos os eventos anteriores para o novo esquema
- Versão dos seus eventos: tenha um ID de versão no seu evento. Quando um evento é lido no banco de dados, algum pedaço de código sabe como 'atualizar' eventos antigos para a estrutura atual. Como a primeira opção, mas basicamente 'on demand'
- Jogue fora seus eventos antigos: quando o aplicativo for atualizado, crie um instantâneo de todas as entidades e jogue fora (ou arquive) os eventos antigos.
- Nunca jogue fora eventos antigos: basicamente mantenha 'PurchaseOrder' para sempre. Quando você precisar de outro campo, use um novo evento como "PurchaseOrderWithCouponCode".
Saga
Uma saga é basicamente um evento de longa duração cortado em pedaços. Isto pode ser devido a diferentes razões: pode ser porque você quer ter uma ação que resulte em vários eventos tratados em paralelo para evitar o bloqueio com uma transação, porque você precisa coordenar vários sistemas externos ou porque precisa coordenar com eventos que cruzam um contexto limitado. Você precisa persisti-los por esse motivo: uma saga pode ser iniciada, lançar alguns eventos e, em algum ponto não-determinístico, pode ser necessário retomar o lançamento de mais eventos. Udi Dahan tem uma boa introdução sobre isso.
Barramentos de mensagens
Há muito que se pode dizer sobre os ônibus. Eles abstraem uma grande parte do armazenamento de eventos para você e podem lidar com cenários mais complicados, por exemplo, quando você tem vários aplicativos que precisam trabalhar com o armazenamento de eventos. Para pequenos aplicativos, você pode escrever diretamente no armazenamento de eventos (e o código que faria isso poderia ser considerado um barramento ...)
Dados atualizados
Resposta curta: você não faz. A terceirização de eventos funciona de várias maneiras porque você é "eventualmente consistente". Neste exemplo, você pode simplesmente exibir uma mensagem para os usuários que pode levar até dez minutos para que os depósitos sejam exibidos ...