gpt4 book ai didi

Java ExecutorService REST 调用错误

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

我正在尝试使用 Java 的 ExecutorService 发送并发 REST 请求,这些请求会生成各种系统信息日志(来自 Controller ),但是遇到了错误。我的请求中约有一半成功到达目标,但另一半看起来好像已发送,但在发送到的服务器上找不到。我认为我在设置 ExecutorService 的逻辑上可能存在缺陷。下面显示的函数 log() 可以从对 Controller 的 REST 调用中调用,并且应该创建一个新线程来发送单独的 HTTP 请求,并继续主线程,以免等待网络 I/O。经过大量搜索,我相信我已正确关闭 ExecutorService 并等待线程完成。由于来自 Controller 的多个请求可以继续传入,任何人都可以看到我的线程创建逻辑中存在某种类型的错误吗?

//Controller
//code
@RequestMapping(value="/log", method= RequestMethod.GET)
public String log()
{
genomicsLogger.log(Severity.err, Category.LOG, "This is a log from the reporting manager!");
return "Hopefully logged";
}


//ClassB
public String log(String trns , String user, Severity severity, Category category, String msg) {
trnsField = trns;
userField = user;
...
...
...
ExecutorService executor = Executors.newFixedThreadPool(1);
Runnable task = () -> {



try {
System.out.println("Started thread: " + Thread.currentThread().getName());
restService.consumeRest(true, instance.getUri().toString(), LOG_URI, list, log, HttpMethod.POST, new HttpHeaders(), String.class);
System.out.println("SENT REST REQUEST");
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}

}
};
executor.submit(task);
try {
System.out.println("attempt to shutdown executor");
executor.shutdown();
executor.awaitTermination(5, TimeUnit.SECONDS);
}
catch (InterruptedException e) {
System.err.println("tasks interrupted");
}
finally {
if (!executor.isTerminated()) {
System.err.println("cancel non-finished tasks");
}
executor.shutdownNow();
System.out.println("shutdown finished");
}

return "";
}

最佳答案

您正在使用每个日志创建执行程序服务并终止它。

这不是使用它的方式,它是为了重复使用,例如此类中的一个字段,并设置您愿意为其使用的线程数(可能大于 1)。并且在您确实确定不会使用它之前不要关闭它(例如在应用程序关闭期间)。

关于Java ExecutorService REST 调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38060824/

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