会话处理错误:Pool#acquire(Duration)已经等待超过配置的45000ms的超时 &



我使用spring-boot-start -graphql与websocket进行简单的客户机-服务器通信。下面是client

中的代码片段
"ws://localhost:8080" +"/graphql";
WebSocketClient client = new ReactorNettyWebSocketClient();

WebSocketGraphQlClient graphQlClient = WebSocketGraphQlClient.builder(endPoint, client).build();
Flux<HomeLocationResponse> locationCreateResponseMono = graphQlClient.documentName("location-document") 
.variable("msisdn", getLocationRequest.getMsisdn()) 
.variable("transactionid", getLocationRequest.getTransactionId()) 
.retrieveSubscription("getLocation")
.toEntity(HomeLocationResponse.class)
在此基础上,我创建了调用此代码的REST端点。这在我启动此服务后的前500个请求中工作得很好,但在500个请求之后,它中断了,我看到以下堆栈跟踪的多个错误
2022-04-26 18:39:34.868 ERROR 102456 --- [ parallel-2] o.s.g.client.WebSocketGraphQlTransport : Session handling error: Pool#acquire(Duration) has been pending for more than the configured timeout of 45000ms
2022-04-26 18:39:34.869 ERROR 102456 --- [ parallel-2] reactor.core.publisher.Operators : Operator called default onErrorDropped
reactor.netty.internal.shaded.reactor.pool.PoolAcquireTimeoutException: Pool#acquire(Duration) has been pending for more than the configured timeout of 45000ms
at reactor.netty.internal.shaded.reactor.pool.AbstractPool$Borrower.run(AbstractPool.java:415) ~[reactor-netty-core-1.0.17.jar:1.0.17]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.4.16.jar:3.4.16]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.4.16.jar:3.4.16]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]

我是websocket的新手,不知道为什么websocket连接没有关闭。

我所涉及的微服务场景如下:

1。GraphQLClient Microservice2。GraphQl Server微服务

GraphQLClient微服务再次将REST端点暴露为包装器。

那么下面的流程将被执行Browser ->GraphQLClient & lt;→GraphQlServer

所以在连接https://github.com/spring-projects/spring-graphql/issues/369后

和添加graphQlClient.stop().subscribe();可以解决这个问题。

最新更新