簡體   English   中英

Spring 5 帶有碼頭連接器的 webclient 在 main 完成執行后繼續運行

[英]Spring 5 webclient with jetty connector continues to run after main completes execution

我正在嘗試使用帶有碼頭連接器的 Spring 5 webclient 測試 rest api。 我從 api 調用中獲取數據,但即使在 main 完成執行后主程序仍繼續運行。 如何解決問題。? 需要什么配置才能讓 Jetty 連接器在 main 完成執行后停止?

我的連接器初始化代碼:

SslContextFactory.Client sslContextFactory = new SslContextFactory.Client();
HttpClient httpClient = new HttpClient();
httpClient.setIdleTimeout(DefaultIdleTimeout);
ClientHttpConnector clientConnector = new JettyClientHttpConnector(httpClient, jettyResourceFactory);
webClient = WebClient.builder().baseUrl(getBaseUrl()).clientConnector(clientConnector).build();

在主 class 中使用 webclient:

webClient.get().uri("/getUri").exchange().flatMap(response.bodyToMono(String.class)).subscribe(di -> {
                    System.out.println(di);
                }, error -> {
                    System.out.println(error.getStackTrace());
                }, () -> {
                    System.out.println("Execution complete");
                });

在日志中得到以下信息:

13:39:11.225 [HttpClient@1165b38-scheduler-1] DEBUG org.eclipse.jetty.io.AbstractConnection - HttpConnectionOverHTTP@4eb423a5::DecryptedEndPoint@4345fb54{<hostname>/<targetIp>:443<->/<sourceIp>:65106,CLOSED,fill=-,flush=-,to=15016/15000} onFillInterestedFailed {}
13:39:11.225 [HttpClient@1165b38-scheduler-1] DEBUG org.eclipse.jetty.io.ManagedSelector - Wakeup ManagedSelector@75ed9710{STARTED} id=1 keys=0 selected=0 updates=0
13:39:11.226 [HttpClient@1165b38-24] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector sun.nio.ch.WindowsSelectorImpl@3d003adb woken with none selected
13:39:11.226 [HttpClient@1165b38-scheduler-1] DEBUG org.eclipse.jetty.util.thread.QueuedThreadPool - queue org.eclipse.jetty.io.ManagedSelector$DestroyEndPoint@74c9b13c startThread=0
13:39:11.226 [HttpClient@1165b38-24] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector sun.nio.ch.WindowsSelectorImpl@3d003adb woken up from select, 0/0/0 selected
13:39:11.226 [HttpClient@1165b38-scheduler-1] DEBUG org.eclipse.jetty.io.FillInterest - onClose FillInterest@52ac96eb{null}
13:39:11.226 [HttpClient@1165b38-21] DEBUG org.eclipse.jetty.util.thread.QueuedThreadPool - run org.eclipse.jetty.io.ManagedSelector$DestroyEndPoint@74c9b13c in QueuedThreadPool[HttpClient@1165b38]@45efc20d{STARTED,8<=8<=200,i=1,r=8,q=0}[ReservedThreadExecutor@4bef0fe3{s=2/8,p=0}]
13:39:11.226 [HttpClient@1165b38-scheduler-1] DEBUG org.eclipse.jetty.client.http.HttpConnectionOverHTTP - Closed HttpConnectionOverHTTP@4eb423a5::DecryptedEndPoint@4345fb54{<hostname>/<targetIp>:443<->/<sourceIp>:65106,CLOSED,fill=-,flush=-,to=15017/15000}
13:39:11.226 [HttpClient@1165b38-24] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector sun.nio.ch.WindowsSelectorImpl@3d003adb processing 0 keys, 0 updates
13:39:11.226 [HttpClient@1165b38-24] DEBUG org.eclipse.jetty.io.ManagedSelector - updateable 0
13:39:11.226 [HttpClient@1165b38-24] DEBUG org.eclipse.jetty.io.ManagedSelector - updates 0
13:39:11.226 [HttpClient@1165b38-24] DEBUG org.eclipse.jetty.io.ManagedSelector - Selector sun.nio.ch.WindowsSelectorImpl@3d003adb waiting with 0 keys
13:39:11.226 [HttpClient@1165b38-21] DEBUG org.eclipse.jetty.io.ManagedSelector - Destroyed SocketChannelEndPoint@7a9db40c{<hostname>/<targetIp>:443<->/<sourceIp>:65106,CLOSED,fill=-,flush=-,to=0/15000}{io=0/0,kio=-1,kro=-1}->SslConnection@53046985{NEED_UNWRAP,eio=-1/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@4345fb54{<hostname>/<targetIp>:443<->/<sourceIp>:65106,CLOSED,fill=-,flush=-,to=15017/15000}=>HttpConnectionOverHTTP@4eb423a5(l:/<sourceIp>:65106 <-> r:<hostname>/<targetIp>:443,closed=true)=>HttpChannelOverHTTP@7dafb76e(exchange=null)[send=HttpSenderOverHTTP@4491419(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@22805291{s=START}],recv=HttpReceiverOverHTTP@52385f05(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
13:39:11.227 [HttpClient@1165b38-21] DEBUG org.eclipse.jetty.io.AbstractConnection - onClose HttpConnectionOverHTTP@4eb423a5::DecryptedEndPoint@4345fb54{<hostname>/<targetIp>:443<->/<sourceIp>:65106,CLOSED,fill=-,flush=-,to=15018/15000}
13:39:11.227 [HttpClient@1165b38-21] DEBUG org.eclipse.jetty.io.AbstractConnection - onClose SslConnection@53046985::SocketChannelEndPoint@7a9db40c{<hostname>/<targetIp>:443<->/<sourceIp>:65106,CLOSED,fill=-,flush=-,to=0/15000}{io=0/0,kio=-1,kro=-1}->SslConnection@53046985{NEED_UNWRAP,eio=-1/-1,di=-1,fill=IDLE,flush=IDLE}~>DecryptedEndPoint@4345fb54{<hostname>/<targetIp>:443<->/<sourceIp>:65106,CLOSED,fill=-,flush=-,to=15018/15000}=>HttpConnectionOverHTTP@4eb423a5(l:/<sourceIp>:65106 <-> r:<hostname>/<targetIp>:443,closed=true)=>HttpChannelOverHTTP@7dafb76e(exchange=null)[send=HttpSenderOverHTTP@4491419(req=QUEUED,snd=COMPLETED,failure=null)[HttpGenerator@22805291{s=START}],recv=HttpReceiverOverHTTP@52385f05(rsp=IDLE,failure=null)[HttpParser{s=START,0 of -1}]]
13:39:11.227 [HttpClient@1165b38-21] DEBUG org.eclipse.jetty.util.thread.QueuedThreadPool - ran org.eclipse.jetty.io.ManagedSelector$DestroyEndPoint@74c9b13c in QueuedThreadPool[HttpClient@1165b38]@45efc20d{STARTED,8<=8<=200,i=1,r=8,q=0}[ReservedThreadExecutor@4bef0fe3{s=2/8,p=0}]
and continue to get log in console & program continues to run..................................

取自官方文檔

https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/web-reactive.html#webflux-client-builder-jetty

您可以在 Jetty 客戶端(和服務器)的多個實例之間共享資源,並確保在 Spring ApplicationContext 通過聲明類型為 JettyResourceFactory 的 Spring 托管 bean 關閉時關閉資源

您的 JettyHttpClientConnector 應該使用 jettyResourceFactory bean 進行實例化,該 bean 的生命周期應該在測試結束時結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM