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

TcpClient只在Spring WebFlux控制器中返回第一个结果

奚昌胤
2023-03-14
@RestController
public class OurTcpClient {

    private Connection connection;

    @GetMapping("echo1")
    public Mono<String> echo(@RequestParam("value") final String value) {
        this.connection.outbound()
            .sendString(Mono.just(String.format("%04d", value.length()) + value)) // prepend length
            .then()
            .subscribe();
        return this.connection.inbound()
            .receive()
            .asString()
            .next();
    }

    @PostConstruct
    public void init() {
        this.connection = TcpClient.create()
            .host("localhost")
            .port(10002)
            .wiretap(true)
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
            .option(ChannelOption.SO_KEEPALIVE, true)
            .connectNow();
    }
}
{
    "timestamp": "2020-04-13T18:56:40.221+0000",
    "path": "/echo1",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Only one connection receive subscriber allowed."
}

任何帮助都将不胜感激。

共有1个答案

荀正谊
2023-03-14

在本例中,您使用next()

return this.connection.inbound()
            .receive()
            .asString()
            .next();

根据Flux#next,javadoc只将此Flux#nextjavadoc发出的第一个条目发送到一个新的mono.,然后订阅将被取消。

在Reactor Netty的上下文中,当您使用NextTimeoutTake等取消订阅的运算符时,这意味着连接将被关闭。

 类似资料:
  • 第一个控制器 The Controllers layer is responsible for handling incoming HTTP requests. In Nest, Controller is a simple class with @Controller() decorator. 控制层负责处理传入的HTTP请求。在Nest中,控制器是一个带有@Controller()装饰器的类。

  • 我知道有很多关于传递参数的线程,但我仍然不明白。 我有阶段与类。在这个类中,我创建了例如变量。然后我单击此阶段上的按钮,它使用创建新阶段,我可以在其中修改此值。在中是值的setter和getter方法。在中,我可以从中获取值并对其进行编辑,但最后当我关闭第二阶段时,我尝试通过中的setter方法将此编辑后的值设置为新数字。然后我关闭它,然后像第一次一样再次打开它。但是我看不到新的编辑值,我再次看到

  • 我有这个控制器,我想归还每个人的家具。这种“孩子气”的方法不起作用。这两个“一对多”的关系是正确的。并不强制使用children方法。任何解决问题的资源都是可访问的。 重要提示:Laravel 5.8版 personController.php

  • 为什么我不能在这里回复一个糟糕的请求?在其他例子中,它工作得很好。

  • 好的,基本上,我试图遍历大量包含文件超链接的html代码。我在用preg_match_all找到所有发生的事情。然而,它永远不会返回预期的匹配量。 快照HTML代码(值为$content): PHP代码: 上面的代码只为我返回第一个匹配项。奇怪的是,回荡着: 所以我想我应该数一数数组,然后把它绕成一个for循环来解决这个问题。然而:

  • 问题内容: 我的代码中有一个ajax调用。我想通过通话实现的效果很好。我想从数据库中删除一些记录,当通过ajax调用该方法时,该记录实际上被删除了,但是就像在symfony方法中,它必须返回一个响应,这就是为什么当执行该方法时会给我错误 我的Ajax电话是 而执行的方法是 我如何从该方法成功返回?有任何想法吗?谢谢 问题答案: 替换为。也不要忘记在顶部写。