【问题标题】:Convert document objects to DTO spring reactive将文档对象转换为 DTO 弹簧反应式
【发布时间】:2019-07-01 20:35:48
【问题描述】:

我正在尝试将 ReactiveCrudRepository 检索为 Flux<Client> 的文档对象转换为 Flux<ClientDto>

现在我找到了一种方法来做到这一点,我不确定这是否会阻塞:

public Mono<ServerResponse> findAll(final ServerRequest serverRequest) {
    final Flux<ClientDto> map = clientService.findAll().map(client -> modelMapper.map(client, ClientDto.class)) /*.delayElements(Duration.ofSeconds(10))*/;
    return ServerResponse.ok()
      .contentType(MediaType.TEXT_EVENT_STREAM)
      .body(map, ClientDto.class);
  }

我已经尝试添加注释的 delayElements 方法,它似乎是一个接一个地发送它们,所以不阻塞。

我认为这更像是一个嵌套的问题,但核心是我想知道如何确定我是否做了一些阻塞。

提前致谢!

【问题讨论】:

  • 在 Flux 的映射后添加 .log() ,您可以在日志文件/控制台中看到执行情况
  • 会试试这个。除了 onSubscription、onNext、onComplete 之外,我应该在元素流中寻找什么。有没有在流被阻塞时调用的方法?
  • 查看执行线程,但如果您不显式调用阻塞事件(如 blockLast 等),并且不使用阻塞库,它将作为解除阻塞运行

标签: spring blocking dto reactive


【解决方案1】:

如果您显式调用阻塞方法,或者如果您使用标准 jdbc 连接器连接到数据库,而不是像 Spring Data 提供的 reactiveMongo 那样的反应式连接器,则您正在阻塞。 在您发布的 snnipet 中,没有任何阻塞,但要完全确定您应该查看您的 clientService 类的代码及其嵌套调用(例如对存储库)

【讨论】:

  • 我正在为 mongo 使用 ReactiveCrudRepository,所以我猜不是。但请记住检查所有层是否有阻塞调用
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2017-04-04
  • 2020-12-04
  • 1970-01-01
相关资源
最近更新 更多