AxonFrameworkevent调度器
事件发布可以源自AxonFramework应用程序中的几个位置。一般来说,这些可以分为两个主要区域:从聚合中调度事件,以及从常规组件调度事件
本篇将描述如何从两个位置获取事件总线上的事件消息。从聚合中调度事件
聚合或其实体通常是所有事件消息的起始点。事件消息只是做出决定的通知;处理命令消息的成功解决方案。
要从聚合发布事件,需要从聚合实例的生命周期中执行此操作。这是强制性的,因为我们希望将聚合标识符绑定到事件消息。事件源也很重要。这是通过将序列号添加到聚合中的每个事件来实现的。
AggregateLifecycle提供了一种简单的方法来实现上述目的:importstaticorg。axonframework。modelling。command。AggregateLifecycle。apply;publicclassGiftCard{CommandHandlerpublicGiftCard(IssueCardCommandcmd){AggregateLifecycle。apply(newCardIssuedEvent(cmd。getCardId(),cmd。getAmount()));}省略状态、命令和事件溯源处理程序}
AggregateLifecycleapply(Object)将经过多个步骤:检索Aggregate的当前范围。Aggregate的最后一个已知序列号用于设置要发布的事件的序列号。提供的事件负载,Object,将被包装在一个EventMessage中。
EventMessage还将接收来自上一步的sequenceNumber以及Aggregate的标识符。事件消息将从这里发布。
该事件将首先发送到Aggregate中所有感兴趣的事件处理程序。
这对于事件溯源是必要的,以相应地更新Aggregate的状态。Aggregate本身处理完事件后,将在EventBus上发布。
Note聚合事件消息中的元数据(MetaData)
AggregateLifecycle还提供了apply(Object,MetaData)函数。这可用于附加命令处理程序特定的元数据。从非聚合调度事件
在绝大多数情况下,聚合将通过应用事件来发布事件。但是,有时需要将事件(可能从另一个组件中)直接发布到事件网关:privateEventGatewayeventGateway;publicvoiddispatchEvent(){eventGateway。publish(newCardIssuedEvent(cardId,100,shopId));}omittedclassandconstructor