使用RabbitMQ一次传播多个事件是否正确?

yjghlzjz  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(154)

我正在开发一个使用微服务架构的应用程序,假设有3个微服务。

  • 用户-微服务(存储用户信息(用户名、密码等))
  • 邮件-微服务(负责发送邮件)
  • UserInfo-微服务(存储用户信息(姓名等))

UserInfo和邮件微服务正在侦听用户微服务。
创建用户时

  • UserInfo微服务希望获取此信息(姓名等)
  • 邮寄微服务希望获得此信息(电子邮件地址)
    问题
  • 是否必须创建事件(UserCreatedEvent)并发送所有信息?(姓名、电子邮件地址)
    问题

UserInfo微服务不需要电子邮件地址信息
邮寄微服务不需要姓名信息

  • 发布两个不同的版本是正确的用法吗?

(用户信息数据);
发布(邮件数据);

bfhwhh0e

bfhwhh0e1#

概括地说,有两种方法可以协调多个服务,即编排和编排:

  • 服务编排指的是一种 * 命令式 * 协调风格,这里的命令式协调指的是具有显式控制和数据流的一系列 * 指令。
  • 服务编排指的是一种 * 声明性 * 协调风格,这里声明性协调指的是一组 * 具有隐式控制和数据流的指令。
    服务协调

在服务编排中有一个专用的编排器,例如Saga或工作流。编排器以所需的顺序调用您的服务,例如用户服务、用户信息服务、邮件服务。
这里,编排器对3个服务具有直接依赖性,然而,服务不具有任何依赖性。

服务编排

在服务编排中,没有专门的编排器。服务发布事件并对事件做出React,例如用户服务发布UserCreatedEvent,用户信息和邮件服务对UserCreatedEvent做出React。
在这里,用户服务、用户信息服务和邮件服务直接依赖于UserCreatedEvent

通常,发出同一事件的不同投影(例如UserInfoData和MailData),UserCreatedEvent的两种投影并不常见,并且不会简化依赖关系

结论

根据你的描述,你选择了服务编排。编排的现实是一个复杂的事件/服务依赖关系,它表示控制和数据流-如果你想改变控制流或数据流,你必须相应地改变多个服务。
您可能还需要考虑服务编排,并通过temporal.io之类的工具实现saga pattern或实现工作流
(* 免责声明 * 我在temporal.io工作)

相关问题