Spring boot 提交Fire-N-Forget请求

Spring boot 提交Fire-N-Forget请求,spring-boot,rsocket,Spring Boot,Rsocket,在Spring引导应用程序中,我有以下用于在Rest控制器中提交请求-响应请求的工作代码: @GetMapping("/request-response") public ResponseEntity<Mono<Message>> requestResponseCtr() throws InterruptedException { Mono<Message> message = this.rsocketRequesterMono.flatMap(

在Spring引导应用程序中,我有以下用于在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));
}
@GetMapping(“/request-response”)
public ResponseEntity requestResponseCtr()引发InterruptedException{
Mono message=this.rsocketRequesterMono.flatMap(
请求者->请求者路径(“请求-响应”)
.数据(新消息(…)
.retrieveMono(Message.class)
);
log.info(“\n响应为:{}”,消息);
返回响应的(可选的(消息));
}
根据我对的理解,我需要将RetrieveMono(…)替换为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()));
}
@GetMapping(“开火并忘记”)
公共响应Entity fireAndForget()引发中断异常{
log.info(“\n忽略…”);
此.rsocketRequesterMono.flatMap(
请求者->请求者.路由(“发射并忘记”)
.数据(新消息(…)
.send()
);
返回ResponseEntity.of(可选)(Mono.empty());
}
然而,它不起作用。在TCP首次亮相工具上,它没有任何流量

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

此呼叫

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。它通常不应该做任何事情。订阅触发工作。