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