我构建了一个批处理作业,该作业从企业调度程序调用以访问 light-4j 微服务以执行一些日常任务。批处理作业是一个独立应用程序,使用 light-4j 客户端模块来调用微服务。
工作完成后发生了一件奇怪的事情。作业完成后,主类不会自动退出。看起来仍然有一些线程正在运行,阻止主类退出。当我将light-4j Http2Client切换到Apache HttpClient时,主类会优雅地退出。我做错了什么吗?
不像其他单线程的Http客户端。light-4j Http2Client 使用事件循环来异步处理多个请求/响应,就像 Undertow Server 一样。这确保了最高的吞吐量和最低的延迟;但是,事件循环分配了一个线程池,该线程池在主线程完成后不会关闭。这需要调用 system.exit(( 来停止 JVM 应用程序。之后,应用程序中的所有正在运行的线程都将停止。
下面是使用 Http2Client 的独立应用程序的示例。
https://github.com/networknt/light-example-4j/blob/release/client/standalone/src/main/java/com/networknt/client/Http2ClientExample.java#L56