【发布时间】:2020-07-01 16:37:19
【问题描述】:
当我想通过 queryUpdateEmitter 但在不同的模块(微服务)中发出查询更新时,我很担心这种情况。我有基于微服务构建的应用程序,并且两者都连接到同一个 Axon 服务器。第一个服务创建订阅查询,并发送一些命令。过了一会儿(通过一些命令和事件),第二个服务处理一些事件,并为第一个订阅的查询发出更新。不幸的是,这个发射似乎没有到达订阅者。查询完全相同,并且位于相同的包中。
订阅:
@GetMapping("/refresh")
public Mono<MovieDTO> refreshMovies() {
commandGateway.send(
new CreateRefreshMoviesCommand(UUID.randomUUID().toString()));
SubscriptionQueryResult<MovieDTO, MovieDTO> refreshedMoviesSubscription =
queryGateway.subscriptionQuery(
new GetRefreshedMoviesQuery(),
ResponseTypes.instanceOf(MovieDTO.class),
ResponseTypes.instanceOf(MovieDTO.class)
);
return refreshedMoviesSubscription.updates().next();
}
发射器:
@EventHandler
public void handle(DataRefreshedEvent event) {
log.info("[event-handler] Handling {}, movieId={}",
event.getClass().getSimpleName(),
event.getMovieId());
queryUpdateEmitter.emit(GetRefreshedMoviesQuery.class, query -> true,
Arrays.asList(
MovieDTO.builder().aggregateId("as").build(),
MovieDTO.builder().aggregateId("be").build()));
}
这种情况在最新版本的 Axon 中也有可能吗?类似的配置,但在一项服务中按预期工作。
@编辑 我找到了解决这种情况的方法:
- 第二个服务不是通过 queryUpdateEmitter 发出查询,而是发布带有电影列表的事件
- 第一个服务处理此事件,然后通过 queryUpdateEmitter 发出更新
但我仍然想知道是否有办法只使用查询来做到这一点,因为这对我来说似乎很自然(commandGateways/eventGateways 按预期工作,queryUpdateEmitter 是例外)。
【问题讨论】:
标签: spring-boot microservices cqrs axon