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