【问题标题】:Submitting A Fire-N-Forget Request提交 Fire-N-Forget 请求
【发布时间】:2020-06-08 17:10:16
【问题描述】:

在 Spring Boot 应用程序中,我有以下工作代码用于在 Rest 控制器中提交请求-响应请求:

@GetMapping("/request-response")
public ResponseEntity<Mono<Message>> requestResponseCtr() throws InterruptedException {

    Mono<Message> message = this.rsocketRequesterMono.flatMap(
            requester -> requester.route("request-response")
                    .data(new Message(...))
                    .retrieveMono(Message.class)
                );
    log.info("\nResponse was: {}", message);

    return ResponseEntity.of(Optional.of(message));
}

根据我对the RSocket Java document 的理解,我需要将 retriveMono(...) 替换为 send() 以提交 fire-n-forget 请求(在文档的第 12 页)。以下代码应该可以工作。

@GetMapping("fire-and-forget")
public ResponseEntity<Mono<Void>> fireAndForget() throws InterruptedException {
    log.info("\nFire-And-Forget...");

    this.rsocketRequesterMono.flatMap(
            requester -> requester.route("fire-and-forget")
                    .data(new Message(...))
                    .send()
    );
    return ResponseEntity.of(Optional.of(Mono.empty()));
}

但是,它不起作用。在 TCP 首次亮相工具上,它没有任何流量。

提交fire-n-forget的正确方法是什么?

【问题讨论】:

    标签: spring-boot rsocket


    【解决方案1】:

    这个电话

    this.rsocketRequesterMono.flatMap(
                requester -> requester.route("fire-and-forget")
                        .data(new Message(...))
                        .send()
        );
    

    没有做任何事情,因为没有人订阅它。

    你可能需要

    ResponseEntity.of(Optional.of(this.rsocketRequesterMono.flatMap(
                requester -> requester.route("fire-and-forget")
                        .data(new Message(...))
                        .send()
        )));
    
    

    【讨论】:

    • 有趣!那么,将 RSocket 代码放在函数内部有订阅的作用吗?
    • 更重要的是,创建 Mono 几乎总是一个 noop。它通常不应该做任何事情。订阅触发工作。
    猜你喜欢
    • 2013-01-13
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2021-10-12
    • 2017-02-19
    • 2013-11-08
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多