当我尝试将CompletableFuture与Axon一起使用时,我遇到了问题。 例如:
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
log.info("Start processing target: {}", target.toString());
return new Event();
}, threadPool);
future.thenAcceptAsync(event -> {
log.info("Send Event");
AggregateLifecycle.apply(event);
}, currentExecutor);
thenAcceptAsync中的-AggregateLifecycle.apply(event)具有意外行为。我的某些@EventSourcingHandler处理程序开始两次处理事件。有人知道如何解决吗?
我一直在阅读文档,而我得到的一切都是:
在大多数情况下,DefaultUnitOfWork将为您提供 您需要的功能。预计处理将在 单线程。
因此,似乎我应该以某种方式使用CurrentUnitOfWork.get / set方法,但仍然无法理解Axon API。
答案 0 :(得分:4)
您不应异步apply()
事件。 apply()
方法将调用聚合的内部@EventSourcingHandler方法,并在工作单元完成(成功)后安排事件发布。
Axon与工作单元(协调单个消息处理程序调用的活动)一起工作的方式,必须在管理该工作单元的线程中调用apply()方法。
如果要异步发布事件,请使用使用异步传输的事件总线,并使用跟踪处理器。