我知道基于事件和基于请求的驱动架构之间的根本区别。问题是,基于请求的总是同步完成,而基于事件的总是异步完成?
此外,在API世界(请求 - 响应)中,如果请求消息无效,通常会返回400个http代码。幸运的是,在API世界中,我们可以执行合同测试,使集成更加强大。
除了将消息放入错误队列之外,在消息传递队列中处理此类似问题的最佳方法是什么? pubsliher服务或消费者服务的责任是首先得到通知吗?
Q1
这是根本的区别。事件发布者不关心谁使用它。在req /响应服务被束缚。
Q2
在事件驱动系统中,发布者有责任包括其他服务可以使用的所有内容。如果事件不包含它需要的所有内容,那么您无法在第一个位置发布事件,因此您需要确保是这种情况。这是事件驱动的全部要点,因为消费者希望选择具有所需数据的消息。
如果您仍然能够发布格式不正确的事件,那么您将拒绝该事件并明确记录它。如果被拒绝的事件是事务的一部分并且链接到另一个事件的发布,那么您将引发失败的处理事件(Saga Pattern)。
最佳做法是用所有必要的有效载荷来提升事件。如果事件没有很好地格式化,那么这是一个糟糕的设计,最终会变得复杂,难以处理。