在 Lagom 的读端处理器上处理事件

Processing of events on read-side processor in Lagom

我有一个概念上的疑问。我知道特定实体的事件在读取端按顺序处理,但我认为下一个事件的处理不会等到前一个事件成功处理并更新数据库。

我说的对吗?如果我是,那么有没有一种方法可以强制仅当先前的事件已成功处理并且读取端数据库已更新时才在读取端处理事件?

通常 Lagom 一次处理一个事件,每个事件标签。不应出现在前一个事件提交成功之前开始处理下一个事件的情况。

唯一的例外是您在事件处理程序中明确执行异步操作。如果这样做,您将需要专门处理它以确保事件的处理等待该操作完成。具体取决于您使用的读取端类型。

Cassandra 读取端 API 期望事件处理程序 return 一个 CompletionStage<List<BoundStatement>>。您需要确保此完成阶段仅在事件处理器调用的所有异步操作完成后才完成。 CompletionStageCompletableFuture API 提供了多种组合和排序多个异步操作的方法。

JDBC 和 JPA 读取端 API 期望您的事件处理程序是同步的和阻塞的,并在专用的执行上下文中执行您的代码以说明这一点。如果您从 JDBC/JPA 事件处理程序调用异步操作,您还应该明确阻止直到它们完成。