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

在spring boot基于webflux的微服务中,谁是订阅者?

孔甫
2023-03-14

注意:此处使用的术语订阅者和订阅来自反应流规范。

考虑以下@RestController方法在Spring Booking基于web通量的微服务中。

    @GetMapping(path = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
    public Flux<TradingUser> listUsers() {
        return this.tradingUserRepository.findAll();
    }

    @GetMapping(path = "/users/{username}", produces = MediaType.APPLICATION_JSON_VALUE)
    public Mono<TradingUser> showUsers(@PathVariable String username) {
        return this.tradingUserRepository.findByUserName(username);
    }

>

  • 此处“谁/什么”将作为“订阅者”?我假设Spring Boot框架提供了订阅者(?)有人可以提供详细信息或任何有关此的链接吗?

    假设我使用类似于postman/curl/browser的客户端调用上面的restfulendpoint,那么在这种情况下,客户端如何向反应式服务器发出需求信号?(只有订阅者对订阅对象有一个句柄,该句柄使用request(n)方法发出请求信号。然而,由于订阅服务器可能也位于由spring boot框架实现的服务器端,实际的客户端如何发出需求信号?)我显然错过了什么。

  • 共有2个答案

    呼延辰龙
    2023-03-14

    在依赖项org.springframework.spring-web中有一个名为public uludservice(...的函数,它在ServletHttpHandlerAdapter中调用.订阅。当WebFlux上的许多教程显式地显示Mono或Flux的订阅者以演示反应性流如何工作时,我认为有时理解框架在幕后处理此订阅是令人困惑的,但在这里它是由框架为我们完成的。

    张兴旺
    2023-03-14

    目前使用HTTP时,确切的背压信息不会通过网络传输,因为HTTP协议不支持这一点。如果我们使用不同的有线协议,这可能会改变。

    因此,反应流需求被转换为HTTP级别的实际读/写。

    还有其他特定的适配器实现:Undertow、Jetty、Tomcat、Retor Netty。如果底层服务器支持反应式流,我们只需让服务器处理需求。如果不是,则使用订阅者实现。

     类似资料:
    • 有一个由 方法以编程方式创建的 flux: 有一个rest控制器: 有几个web客户端(在独立的进程中): JavaScript中有几个EventSource实例: 只有前两个“订户”将开始接收消息(不管它是web客户端还是EventSource实例)。另一个将打开连接,获取HTTP 200状态,但是事件流保持为空。客户端和服务器端都没有错误。 我不明白,对“2个订阅者”的限制在哪里。如果我想支持

    • 我写了一个逻辑,使用Spring反应器库来获取所有运算符,然后在异步模式下为每个运算符(分页)获取所有设备。 创建了一个通量来获取所有运算符,然后订阅它。 现在,对于每个运算符,我正在获取需要多个订阅才能获得设备mono的设备,该设备通过订阅MONO获得所有页面异步。 此代码工作正常。但我的问题是,从内部订阅mono是一个好主意吗?

    • 我有一个使用本教程的工作示例,可以根据需要发送和接收主题/订阅:https://azure.microsoft.com/en-us/documentation/articles/service-bus-queues-topics-subscriptions/ 但是,现在我想根据BrokeredMessage的to属性为每个订阅设置SQL过滤器。我后面的教程提到,有可能“创建订阅时,您可以提供一个对

    • 在REST控制器中,我需要调用REST以获取一个值,用作第二次REST调用的URI变量。 问题是在WebFlux REST中不可能调用mono/flux上的块。 代码抛出 Java . lang . illegalstateexception block()/block first()/block last()正在阻塞,这在线程反应器中是不支持的-http 我试图改变 . build(result

    • 订阅号和服务号都是微信公众号的一种,对于一个普通的微信用户,可能感受的差别只是所有订阅号的消息都收纳在了微信会话列表的【订阅号消息】中,而服务号消息则是一个个服务号出现在了微信会话列表中; 对于企业市场人员,微信服务号与订阅号的主要区别体现在以下几点: 1. 带参数的二维码 微信服务号支持参数二维码,支持在不同的场景下生成微信服务号参数二维码,可以帮助企业识别微信服务号粉丝关注来源。 订阅号不支持

    • 我在spring中有一个服务,它需要使用十种不同的方法获取数据。 我希望这些方法并行执行,以执行一些DB操作并返回到父线程。但是父线程应该等到所有响应出现,然后返回响应。 在我当前的方法中,我使用反应式mono异步执行所有方法,但主线程不等待订阅者方法完成。 下面是我订阅的两种方法 下面是我的主要方法 以下是我的输出: 我的输出显示,主线程没有等待订阅服务器完成其任务,因此我如何处理这种情况?