基于请求与基于事件的架构

Request based vs Event based architecture

Q1

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

Q2

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

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

Q1

这是根本的区别。事件发布者不关心谁消费它。在 req/response 中,服务被捆绑。

Q2

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

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

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