В настоящее время я пытаюсь проникнуть в архитектуру микросервисов и столкнулся с проблемой согласованности данных. Я читал, что дублирование данных между несколькими микросервисами считается хорошей идеей, потому что это делает каждый сервис более независимым.
Однако я не могу понять, что делать в следующем случае для обеспечения согласованности:
- У меня есть служба поддержки клиентов, у которой есть метод RegisterCustomer.
- Когда я регистрирую клиента, я хочу отправить сообщение через RabbitMQ, чтобы другие службы могли получить эту информацию и сохранить ее в своей БД.
Мой код выглядит примерно так:
...
_dbContext.Add(customer);
CustomerRegistered e = Mapper.Map<CustomerRegistered>(customer);
await _messagePublisher.PublishMessageAsync(e.MessageType, e, "");
//!!app crashes
_dbContext.SaveChanges();
...
Итак, я хотел бы знать, как я могу обработать такой случай, когда приложение отправляет сообщение, но не может сохранить сами данные? Конечно, я мог бы поменять методы DbContextSave и PublishMessage , но проблема все еще остается. Что-то не так с моим подходом к хранению данных?