当前位置: 首页 > 知识库问答 >
问题:

如何在从浏览器/REST客户端调用时自动订阅RESTendpoint?

齐阎宝
2023-03-14

在ProjectReactor或Reactive流中,在订阅()之前不会发生任何事情。

Reactive streams数据流不会发生,除非有人订阅它,但我看到所有REST API(如Find、save和inserts)都不显式调用subscribe,而是数据在生产者和订阅者之间流动。

@RestController
class PersonController {

      private final PersonRepository repository;

      public PersonController(PersonRepository repository) {
        this.repository = repository;
      }
      @GetMapping("/all")
      public Flux<Person> index() {

         return repository.findAll();

     }
      @GetMapping("/people")
      Flux<String> namesByLastname(@RequestParam Mono<String> lastname) {

        Flux<Person> result = repository.findByLastname(lastname);
        return result.map(it -> it.getFullName());
      }

      @PostMapping("/people")
      Flux<People> AddPeople(@RequestBody Flux<Person> people) {

          return repository.saveAll(people);
      }
}

为什么我们不需要调用RESTendpoint的subscribe来启动Project Reactor中的数据流?

我是不是漏掉了什么?

共有1个答案

周阳波
2023-03-14

您是对的--当应用程序设置flux/monoreactive管道时,管道中的任何内容都不会执行,直到有东西subscribe订阅它。

以下是Spring WebFlux中请求/响应交换期间发生的情况:

  • 服务器接收请求并将其转发给WebFlux
  • 根据请求和您的应用程序代码,将构建一个反应管道,包括过滤器、控制器等。您可以将其视为连接请求和响应的管道
  • HTTP客户端通过TCP堆栈请求读取,背压信息由基础服务器传输。
 类似资料:
  • 我对硒很陌生。我开发了一个应用程序,使用一个selenium web驱动程序来做网页上的一些动作。当我在本地运行时,它可以很好地工作,也就是说,它在我的机器中启动了一个浏览器。我在VM服务器上部署了这个应用程序,所以脚本在服务器上运行(在VM Ware机器中启动的浏览器),而不是在客户端。谁能帮助我如何在客户端启动浏览器?

  • 问题内容: 是否有从客户端浏览器获取时区的可靠方法?我看到了以下链接,但我想要一个更强大的解决方案。 使用JavaScript自动检测时区 JavaScript中的时区检测 问题答案: 查看此存储库pageloom很有帮助 下载jstz.min.js并将功能添加到您的html页面 然后从您的显示代码调用此函数

  • 谢谢你的反馈。BrowserCap是一个遗留特性,我们不再继续更新它,除非我们发现ASP.NET特性因此而中断。如果您真的希望您的应用程序将Edge识别为Edge(而不是chrome),那么您可以添加自己的浏览器文件,以匹配app_browsers文件夹下的Edge的UA字符串。反馈 更新:*以下是来自三个浏览器的UA字符串,可能表明最后一条信息可能是指示器,但不是Chrome的。正如你所看到的,

  • 轻推支持在电脑端和手机端创建订阅号,创建完成后待管理员审核通过后即创建成功,但仍需登录电脑端轻推进入企业管理设置和发送订阅号。 1. 手机端 通讯录-订阅号-发现-新建-设置头像-设置名称-描述订阅号-选择需要创建订阅号的企业 2. 电脑端 电脑端操作方法与手机端相同。

  • 我知道这是不好的做法和特征识别应该是建设网站的方式。然而,这不是我的用例。 我有我的浏览器扩展的不同发行版,我想根据他们当前的浏览器更改下载按钮。 我试过使用,事实证明这是非常没用的,因为大多数浏览器都设置了所有流行的用户代理。例如chrome就有这个。 我见过很多网站的下载按钮上都有这个功能。如何做到这一点呢? 编辑:我现在了解了为什么“mozzila/x.x”位于userAgent字符串开头的

  • 一面-2023年5月6日 ios客户端,大前端、object-c 自我介绍。有点背稿的感觉。 聊一个项目。说了OSG的项目。提到内存管理。 开始八股。内存:只能指针。 多态,静态、动态。模板、虚函数。静态的除了模板还有啥。析构函数为什么要添加虚函数。 空类size的大小。 struct/class的区别。 堆/栈/BSS几个内存类别 TCP四次挥手。 ipv4地址空间这么小怎么够用,NAT。用同一