如何在一个微服务中创建实体时更新相关微服务中的 table

How to update table in the related microservices when entity is created in one microservices

我正在学习微服务架构并创建了 3 个微服务。每个ms都有自己的数据库。

如下所示,

  1. 商务女士
  2. 客户女士
  3. 税毫秒

我按照在所有微服务中复制 Business table 的方式设计的。每当在 Business ms 中创建新业务时,我想更新业务 Id 和 Customers ms 中的 name 和 Tax ms 以创建参考。

我尝试通过以下方式实现此目的,

  1. 托管服务 - 这将注册为业务微服务的一部分,当在业务中添加新行时 table,我将该行添加到 System.Threading.Channels. HostedService 将读取队列,然后调用 Customers ms 和 Tax ms API 来更新企业 ID 和名称。

  2. 事件驱动API - 我还没有做到这一点。想法是让 Business ms 作为生产者,让 Customer ms 和 tax ms 作为消费者。

实现此目标的最佳方法是什么?请问有什么想法吗?

我们跟你的需求是一样的,我们采用事件驱动的架构来解决这个问题。

A​​pache Kafka 是满足此类要求的最佳消息传递系统。

实施时需要考虑的一些事项。

  1. 假设 CRUD 微服务(与 DB 交互并持久化主要实体)将数据保存到 DB 并且 Kafka 服务器(任何消息系统)关闭,那么它将导致数据不一致。这个问题的解决方案是,您需要创建新的 table 来跟踪发布时失败的事件。在后台,玉米作业将获取所有失败的事件并尝试再次发布。

  2. 您成功按主题发布了事件,但消费者已关闭。在这种情况下你不需要做任何事情,因为一旦消费者启动,它就会开始阅读消息。(注意考虑消息的保留期)

  3. 你成功发布了topic上的事件,consumer up了运行,但是因为数据格式问题,消息没有被消费,又是数据不一致的情况发生在微服务之间。在这种情况下,需要将该事件数据推送到 DLQ 并需要再次解析它。