【问题标题】:Axon - Cannot emit query update in different microserviceAxon - 无法在不同的微服务中发出查询更新
【发布时间】:2020-07-01 16:37:19
【问题描述】:

当我想通过 q​​ueryUpdateEmitter 但在不同的模块(微服务)中发出查询更新时,我很担心这种情况。我有基于微服务构建的应用程序,并且两者都连接到同一个 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 中也有可能吗?类似的配置,但在一项服务中按预期工作。

@编辑 我找到了解决这种情况的方法:

  1. 第二个服务不是通过 queryUpdateEmitter 发出查询,而是发布带有电影列表的事件
  2. 第一个服务处理此事件,然后通过 queryUpdateEmitter 发出更新

但我仍然想知道是否有办法只使用查询来做到这一点,因为这对我来说似乎很自然(commandGateways/eventGateways 按预期工作,queryUpdateEmitter 是例外)。

【问题讨论】:

    标签: spring-boot microservices cqrs axon


    【解决方案1】:

    这遵循QueryUpdateEmitter 的实现(无论使用Axon Server 是/否)。

    QueryUpdateEmitter 存储一组更新处理程序,引用已发布的订阅查询。然而,它只维护由给定 JVM 处理的已发布订阅查询(因为 QueryUpdateEmitter 实现未分发)。

    它的目的是在组件(通常是查询模型“投影仪”)中配对,该组件回答有关给定模型的查询,更新模型发出这些更新。

    因此,将 QueryUpdateEmitter 操作放在不同的(微)服务中作为处理查询的位置将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 2021-10-21
      • 2022-01-16
      • 2021-12-20
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多