我想使用 Axon 框架实现 CQRS 和 ES
我有一个相当复杂的 HTML 表单,它表示招聘过程的六个步骤。
ES 将有助于生成选定日期的历史统计数据并跟踪表单的变化。
管理员始终可以执行多项操作:
表单更新(仅差异)从 UI 应用程序发送到后端。
假设我只想对服务器端应用程序进行更改,问题是什么应该是命令,什么应该是事件,我考虑三个选项:
Form Update Event Interviewer Assigned, Notifications Turned Off,Rejected on technical interviewNotifications Turned Off会成功,但Interviewer Assigned由于分配未经授权的用户而失败。也许我应该在命令生成之前检查所有约束?Assign Interviewer,Turn Off Notifications每个命令都会生成事件 ex:Interviewer Assigned, Notifications Turned OffAssign Interviewer可能由于分配未经授权的用户而失败。这最终会导致状态不一致,因为有些事件将存储在存储库中,有些则不会。也许我应该在命令生成之前检查所有约束?问题介于 Project Reactor 和 Reactive MongoDB (Spring Data) 之间。
执行包含(按以下顺序)的流时:
流被取消(查看下面的代码和日志)
@GetMapping("/test/{msg}")
public Mono<SomeObject> test(@PathVariable String msg) {
return repository.findByMessage(msg).log("1")
.map(someObj -> delaySeconds(someObj, 35)).log("2");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,30 秒后流被取消,但又过了 5 秒(超时为 35 秒),onNext事件被执行。
12:59:18.556 [Thread-9] INFO com.why.temp.TempController - Saved:SomeObject(id=5b604106ef301746a86665f3, message=WHY)
12:59:18.591 [http-nio-8080-exec-2] INFO 1 - | onSubscribe([Fuseable] MonoFlatMap.FlatMapMain)
12:59:18.592 [http-nio-8080-exec-2] INFO 2 - | onSubscribe([Fuseable] FluxMapFuseable.MapFuseableSubscriber)
12:59:18.593 [http-nio-8080-exec-2] INFO 2 - | request(unbounded)
12:59:18.593 [http-nio-8080-exec-2] INFO 1 - | …Run Code Online (Sandbox Code Playgroud)