播种微服务数据库
给定服务A(CMS)来控制模型(产品,让我们假设它具有的唯一字段是id,标题,价格)以及服务B(运费)和服务C(电子邮件)必须显示给定模型的方法是什么在事件采购方法中跨这些服务同步给定的模型信息?我们假设产品目录很少更改(但确实会更改),并且有管理员可以非常频繁地访问货运和电子邮件数据(示例功能为:B:display titles of products the order contained和C:)display content of email about shipping that is going to be sent。每个服务都有自己的数据库。 解决方案1 发送事件内有关产品的所有必需信息-这意味着以下结构order_placed: { order_id: [guid], product: { id: [guid], title: 'Foo', price: 1000 } } 关于服务B和C的产品信息存储在表的productJSON属性orders中 这样,为了显示必要的信息,仅使用从事件中检索到的数据 问题:根据需要在B和C中提供哪些其他信息,事件中的数据量可能会增加。B和C可能不需要有关Product的相同信息,但是事件必须包含两者(除非我们将事件分成两个)。如果给定事件中不存在给定数据,则代码将无法使用它-如果我们将给给定产品添加颜色选项,则对于B和C中的现有订单,给定产品将是无色的,除非我们更新事件然后重新运行它们。 解决方案2 在事件内仅发送产品的GUID-这意味着以下结构order_placed: { order_id: [guid], product_id: [guid] } 在服务B和C上,产品信息存储在表的product_id属性orders中 必要时,服务B和C通过对A/product/[guid]端点执行API调用来检索产品信息 问题:这使得B和C始终依赖于A。如果产品模式在A上发生更改,则必须对依赖于它们的所有服务进行更改 解决方案3 仅在事件内发送产品的GUID-这表示order_placed的结构如下: { …