您好,我对ddd和Rabbitmq有以下疑问:
我有两个微服务:
员工和部门
要创建部门,我需要从员工微服务获取员工ID。
但是我有以下问题:我必须从部门域的缓存中获取我的员工还是在我的服务中使用它?
我有一个缓存,仅保留部门中员工的ID和姓名。
答案 0 :(得分:1)
我知道您正在寻找一种特定的解决方案,但是您要提出的问题有很多核心问题:
微服务不应围绕数据结构构建。看来 Employee 和 Department 是系统中的两个表,您正在尝试围绕它们开发微服务。但这是错误的,并会导致复杂性增加。您要问的问题是复杂性的一个很好的例子-两个微服务之间数据共享的增加。您的微服务应包含您域的“区域”,“工作流”或“功能”。
三个简单的规则可为您提供特定问题的答案:
微服务什么都不共享:所有数据,行为和技术都包含在微服务中。除非通过定义明确的API,否则外部世界应该无法访问数据。除了直接访问表之外,这些API可以基于REST,基于消息,基于RPC或其他任何方式。
微服务拥有自己的主数据,其他所有人都对其进行缓存:同步调用微服务API不是一个好主意。如果需要,最好在微服务中本地缓存数据。有基于消息的反应式体系结构可以使您实时执行此操作,但是您应该考虑工作流程和调试中复杂性的增加。
微服务可以在域事件的帮助下共享数据:虽然可以同步设置缓存机制,但建议您通过域事件传播状态。
您应该更深入地研究DDD的“战略设计”部分,以便能够构建有用的,可维护的微服务。除非您确定正确的界限,否则您将设置自己以增加复杂性。