0

您好我有以下关于 ddd 和 rabbitmq 的问题:

我有两个微服务:

员工和部门

并创建一个部门,我需要从员工微服务中获取员工 ID。

但是我有以下问题:我必须从我部门域的缓存中获取我的员工还是在我的服务中进行?

我有一个缓存,我只保留部门中员工的 ID 和姓名。

4

1 回答 1

1

我知道您正在寻找特定的解决方案,但是您提出的问题存在许多核心问题:

微服务不应该围绕数据结构构建。EmployeeDepartment似乎是您系统中的两张表,您正试图围绕它们开发微服务。但这是错误的,会导致复杂性增加。您提出的问题是复杂性的一个很好的例子——两个微服务之间的数据共享增加。你的微服务应该包含你领域的“区域”、“工作流程”或“功能”。

三个简单的规则可以为您提供特定问题的答案:

  • 微服务不共享任何东西:所有数据、行为、技术都包含在微服务中。外部世界不应该能够访问数据,除非通过定义明确的 API。除了直接访问表之外,这些 API 可以是基于 REST、基于消息、基于 RPC 或其他任何东西。

  • 微服务拥有自己的主数据,其他人缓存它:同步调用微服务 API 不是一个好主意。如果需要,最好在微服务中本地缓存数据。有基于消息的反应式架构允许您实时执行此操作,但您应该考虑工作流和调试中复杂性的增加。

  • 微服务可以借助域事件共享数据:虽然您可以同步设置缓存机制,但建议您使用域事件传播状态。

您应该更深入地查看 DDD 的“战略设计”部分,以便能够构建有用的、可维护的微服务。除非你得到正确的界限,否则你正在为增加复杂性设置自己。

于 2020-10-03T17:13:11.290 回答