打字稿:ddd +传递消息

时间:2020-10-03 04:45:10

标签: typescript rabbitmq domain-driven-design

您好,我对ddd和Rabbitmq有以下疑问:

我有两个微服务:

员工和部门

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

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

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

1 个答案:

答案 0 :(得分:1)

我知道您正在寻找一种特定的解决方案,但是您要提出的问题有很多核心问题:

微服务不应围绕数据结构构建。看来 Employee Department 是系统中的两个表,您正在尝试围绕它们开发微服务。但这是错误的,并会导致复杂性增加。您要问的问题是复杂性的一个很好的例子-两个微服务之间数据共享的增加。您的微服务应包含您域的“区域”,“工作流”或“功能”。

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

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

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

  • 微服务可以在域事件的帮助下共享数据:虽然可以同步设置缓存机制,但建议您通过域事件传播状态。

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