【发布时间】:2019-12-01 20:08:39
【问题描述】:
我正在尝试将我们的注册流程转移到使用 Spring Webflux 作为 POC 的反应式设置,我们使用 AxonFramework 来实现 CQRS 和 ES。我们的命令流被相当直接地转换了,但是我在转换我们的查询端时遇到了麻烦。
当我尝试转换返回 Mono 响应类型的点对点查询时出现问题,如果我指定 Mono ResponseType,我会得到“No Handler found for [query] with response type”
谁能帮我弄清楚如何使用 Mono ResponseTypes 处理查询?
查询处理程序:
@QueryHandler
fun handleIsEmailUniqueQuery(query: IsEmailUniqueQuery): Mono<Boolean> =
accountRepository.findAccountByEmail(query.email)
.flatMap { Mono.just(true) }
.switchIfEmpty(Mono.just(false))
调用查询网关的代码
fun validateEmailUnique(request: CreateRegistrationRequest): Mono<CreateRegistrationCommand> =
Mono.fromFuture(queryGateway.query(IsEmailUniqueQuery(request.email), ResponseTypes.instanceOf(Mono::class.java)))
.flatMap { mono -> mono.cast(Boolean::class.java)}
.flatMap { isEmailUnique ->
when (isEmailUnique) {
true -> Mono.just(CreateRegistrationCommand(request.email, request.password, UUID.randomUUID().toString()))
else -> Mono.error(DomainValidationException("ERR_EMAIL_UNIQUE"))
}
}
【问题讨论】:
标签: spring-webflux cqrs axon