我目前正在尝试进入微服务架构,并且遇到了数据一致性问题。我读过,在多个微服务之间复制数据是个好主意,因为它使每个服务更加独立。
但是,我无法弄清楚在以下情况下该怎么做才能提供一致性:
- 我有一个具有 RegisterCustomer 方法的客户服务。
- 当我注册客户时,我想通过 RabbitMQ 发送一条消息,以便其他服务可以获取此信息并存储在其数据库中。
我的代码看起来像这样:
...
_dbContext.Add(customer);
CustomerRegistered e = Mapper.Map<CustomerRegistered>(customer);
await _messagePublisher.PublishMessageAsync(e.MessageType, e, "");
//!!app crashes
_dbContext.SaveChanges();
...
所以我想知道,当应用程序发送消息但无法自行保存数据时,我该如何处理这种情况?当然,我可以交换DbContextSave和PublishMessage方法,但问题仍然存在。我的数据存储方法有问题吗?