轴突和可完成的未来

时间:2018-10-22 20:51:24

标签: completable-future axon

当我尝试将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。

1 个答案:

答案 0 :(得分:4)

您不应异步apply()事件。 apply()方法将调用聚合的内部@EventSourcingHandler方法,并在工作单元完成(成功)后安排事件发布。 Axon与工作单元(协调单个消息处理程序调用的活动)一起工作的方式,必须在管理该工作单元的线程中调用apply()方法。

如果要异步发布事件,请使用使用异步传输的事件总线,并使用跟踪处理器。