7

第一季度

我知道基于事件与基于请求/驱动架构之间的根本区别。问题是基于请求的总是同步完成,而基于事件的总是异步完成?

第二季度

此外,在 API 世界(请求-响应)中,如果请求消息无效,您通常会返回 400 http 代码。幸运的是,在 API 世界中,我们可以执行合同测试,使集成更加健壮。

除了将消息放入错误队列之外,在消息队列中处理此类似问题的最佳方法是什么?发布者服务或消费者服务有责任首先得到问题通知吗?

4

1 回答 1

10

第一季度

这就是根本的区别。事件发布者不关心谁使用它。在请求/响应中,服务被捆绑。

第二季度

在事件驱动系统中,发布者有责任包含其他服务可以使用的所有内容。如果事件不包含它需要的所有内容,那么您首先无法发布事件,因此您需要确保是这种情况。这是事件驱动的全部要点,因为消费者希望使用它需要的所有数据来选择消息。

如果您仍然能够发布格式不正确的事件,那么您将拒绝该事件并肯定记录它。如果该被拒绝事件是事务的一部分并链接到另一个事件的发布,那么您将引发失败的处理事件(Saga 模式)。

最佳实践是使用所有必要的有效负载引发事件。如果事件的格式不正确,那么这是一个糟糕的设计,最终会变得复杂,难以大规模处理。

于 2019-02-25T23:21:55.083 回答