如果我有一个通用的服务,比如电子邮件服务,它根据来自其他服务的事件发送电子邮件,下面哪一种方法是最好的:
-
Email service监听多个队列/特定事件,并在这些事件触发后发送邮件。例如,电子邮件服务监听
users_queue
,并在user_created
事件时发送欢迎邮件。 -
配置通用的邮件队列,多个业务可以向该队列发送通用的
send_email
事件。关于此方法的另一个注意事项:如果除了电子邮件服务之外的其他服务想要从该服务中侦听事件,该怎么办?我是否应该发出两个事件,一个发送到电子邮件队列,另一个发送到特定于此服务的队列,并让其他服务实现第一种方法?
如果我正确理解了您的问题,您是在问您是否应该采用基于编排或编排的方法:
- 服务编排指的是命令式协调风格,这里命令式协调指的是带有显式控制和数据流的指令序列。
- 服务编排指的是一种声明性协调风格,这里的声明性协调指的是一组带有隐式控制和数据流的指令。
备选方案#1详细介绍了基于编排的方法,电子邮件服务对一组队列上的一组事件类型作出反应,这里是队列users_queue
上的一个事件类型user_created
备选方案#2详细介绍了基于编排的方法,电子邮件服务对一个队列上的一个命令类型做出反应,这里是队列email_queue
上的命令类型send_email
在选择方法时,请考虑以下几点:
电子邮件服务需要一组输入参数,如收件人地址、主题行、电子邮件模板和模板数据。
因此,如果您选择基于编排的方法,Email服务响应的每个事件必须提供(检索信息)所需的参数——事实上,每个事件必须为响应该事件的所有服务提供所有(检索信息)所需的参数。
对于你的最后一个问题,如果你应该向多个队列发出相同的事件:
考虑发射事件一旦和管理订阅的事件中间件照顾和/或事件路由