Event和Message区别
2019-11-30 本文已影响0人
water_lang
在事件驱动架构中,新手通常将“事件”和“消息”认为是可以互换的。尽管它们具有许多共同的属性,但它们的用途不同且具有不同的属性。我对这两个词最常见的定义是消息。
消息是从一个系统告诉另一个系统将要被执行的动作的请求。发送方可能知道也可能不知道将要接收和处理该消息的进程,但是发送方期望它会以某种方式得到处理。发送方会把需要处理的数据的全部有效payload封装在消息中,并适当格式化数据以便接收方处理(即,两个系统之间存在一种协议)。消息的命名通常是作为请求完成的(我想在名称前加上“ please”)–比如 UpdateInventory或CreateUser。
然而,事件是一个通知,它表明数据已处理,某些对象的状态已更改。尽管事件通常是在处理消息后创建的,但这不是必需的。事件通常以过去式状态来命名,例如InventoryUpdated或UserCreated。
事件是轻量级的,因为它们不包括聚合的所有数据-它们的有效payload可以只是已更改的聚合的ID,也可以是ID以及已更改的属性,以便接收者可以更新其缓存的副本。如果集合很小(包括ID在内,少于5个属性),我将把聚合里的所的数据都包括进来。
事件和消息之间的重要区别是,不希望对事件进行进一步处理。事件发布后,所有系统都可以忽略它,而不会造成任何伤害。但是,一条消息带有一个假设,即某处将处理该消息。
另一个区别是,消息可以影响0个或多个聚合,而事件反映的恰好是一个聚合的变化。这个消息表示将来需要更新哪些聚合,也可能根本不做任何更改。但是,每个聚合的创建都应发布一个事件,说明状态已进行了更改。
您可能已经听说过“事件源和事件流”一词。我在这里描述的事件对他们都适用。