关于事件的序号,事件会不会乱序,和事件会不会被重复处理的问题。
来源:8-6 Axon框架-实例(下)

囍先生
2019-04-14
老师好,通过听课对这个axon框架有了更多的了解,但是还是有几个地方比较疑惑,如果数据库中的数据都丢失了后,还是可以根据之前的事件重新生成物化视图数据,这个是需要自己写程序,重新触发事件来执行吗,还是axon自动执行的呢?还有课上说事件是按序号来依次处理的,这个序号是根据事件生成的时间由axon自动生成的吗,序号不会重复吗,是通过这个序号来保证事件不会乱序吗?如果有个服务是部署在两台机器上,怎么保证同一个事件不会被这两个服务重复处理了呢。万分期待老师的答复,由于是用的同事的慕课账号,担心无法及时看到老师的回复,如果方便的话,不知是否可以回复到我邮箱一份。
1回答
-
大漠风
2019-06-07
axon里面的event都会有一个类似状态一样的标记,说明它已经处理过,如果需要重新执行,可以通过axon提供的TrackingEventProcessor的重置功能来实现。我们可以从axon的configuration里面获得这个处理器,然后重置它的token。
具体方法请参考文档:
这个是4.1版的,3.x版的网页打不开了,但是,方法是一样的。
再说事件的重复问题,axon在创建event的时候,会根据event的aggregateId、以及一个序列号来保证事件的不重复,而且,在生成新事件的时候,也会通过某种锁的方式(这个和使用的EventStorageEngine有关),来获得下一个序列号,以此来保证事件不重复。
如果是部署在两台机器上,这时候就需要使用`DistributedCommandBus`,它会将同一个command始终分发到同一个实例上,这样就能保证这个command要处理的聚合对象始终在同一个实例上。在之后的例子中,我们使用spring-cloud的实现。至于事件的序号,那也是一样的,它通过数据库的锁的机制来保证。
00
相似问题