我正在开发一个使用微服务架构的应用程序,假设有3个微服务。
- 用户-微服务(存储用户信息(用户名、密码等))
- 邮件-微服务(负责发送邮件)
- UserInfo-微服务(存储用户信息(姓名等))
UserInfo和邮件微服务正在侦听用户微服务。
创建用户时
- UserInfo微服务希望获取此信息(姓名等)
- 邮寄微服务希望获得此信息(电子邮件地址)
问题 - 是否必须创建事件(UserCreatedEvent)并发送所有信息?(姓名、电子邮件地址)
问题
UserInfo微服务不需要电子邮件地址信息
邮寄微服务不需要姓名信息
- 发布两个不同的版本是正确的用法吗?
(用户信息数据);
发布(邮件数据);
1条答案
按热度按时间bfhwhh0e1#
概括地说,有两种方法可以协调多个服务,即编排和编排:
服务协调
在服务编排中有一个专用的编排器,例如Saga或工作流。编排器以所需的顺序调用您的服务,例如用户服务、用户信息服务、邮件服务。
这里,编排器对3个服务具有直接依赖性,然而,服务不具有任何依赖性。
服务编排
在服务编排中,没有专门的编排器。服务发布事件并对事件做出React,例如用户服务发布UserCreatedEvent,用户信息和邮件服务对UserCreatedEvent做出React。
在这里,用户服务、用户信息服务和邮件服务直接依赖于UserCreatedEvent
通常,发出同一事件的不同投影(例如UserInfoData和MailData),UserCreatedEvent的两种投影并不常见,并且不会简化依赖关系
结论
根据你的描述,你选择了服务编排。编排的现实是一个复杂的事件/服务依赖关系,它表示控制和数据流-如果你想改变控制流或数据流,你必须相应地改变多个服务。
您可能还需要考虑服务编排,并通过temporal.io之类的工具实现saga pattern或实现工作流
(* 免责声明 * 我在temporal.io工作)