gpt4 book ai didi

java - 只允许一个连接接收订阅者

转载 作者:行者123 更新时间:2023-12-02 09:45:33 25 4
gpt4 key购买 nike

有人可以帮我 Only one connection receive subscriber allowed.错误?

我查看了Oleh Dokuka's answer但这对我没有帮助。

出于演示目的,我简化了代码。在我的实际代码中,我收到批量 Json 请求,我需要查询两个不同的表,从请求正文中获取两个不同的参数,使用这两个结果调用另一个服务并在响应中发送结果。

路由器功能

@Bean
public RouterFunction<ServerResponse> myRoute(MyRequestHandler myRequestHandler) {

return route(RequestPredicates.POST("/api/something"), myRequestHandler::myHandlerFunction);
}

处理函数

public Mono<ServerResponse> myHandlerFunction(ServerRequest serverRequest) {
Mono<Integer> just = Mono.just(22);

//For simplification I've added String body here. In actual code I have proper json body
Mono<String> stringMono = serverRequest.bodyToMono(String.class);

Mono<String> mono = stringMono.zipWith(stringMono).map(t -> t.getT2() + t.getT1());

return ok().body(mono, String.class);
}

如果我替换stringMono,代码工作正常与 just在这两个地方

Mono<String> mono = stringMono.zipWith(stringMono).map(t -> t.getT2() + t.getT1());

为什么它与 Mono<String> mono = just.zipWith(just).map(t -> t.getT2() + t.getT1());

提前致谢。

最佳答案

看起来 stringMono.zipWith(stringMono) 将导致 Spring 尝试订阅请求正文两次,这可能是您的问题,因为 ServerRequest 是单播的并且只能有一个订阅者.

试试这个:

Mono<String> stringMono = serverRequest.bodyToMono(String.class).publish(body -> body.zipWith(body).map(t -> t.getT2() + t.getT1()));

publish()不会导致正文被多次订阅。

关于java - 只允许一个连接接收订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56694523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com