gpt4 book ai didi

java - 有什么好的、健壮的、异步的方法来检查 Play Controller 中的 URL 是否存在?

转载 作者:行者123 更新时间:2023-12-01 05:32:17 26 4
gpt4 key购买 nike

我最初尝试过这个:

private static boolean checkUrlsAreReachable(String... urls) {
checkArgument(urls.length > 0);

List<F.Promise<WS.HttpResponse>> promises = newArrayList();
for (String url : urls) {
promises.add(WS.url(url).followRedirects(true).timeout("30s").getAsync());
}

List<WS.HttpResponse> results = await(F.Promise.waitAll(promises));
for (WS.HttpResponse response : results) {
if (!response.success()) {
logger.debug("Failed accessing one of " + Joiner.on(", ").join(urls));
return false;
}
}

return true;
}

但我发现了一些警告:

  • 如果相关 URL 无法很好地解析(例如 http://a.com/),我会在 WS.url(url) 上遇到异常。
  • 至少在调试时,对 getAsync() 的调用似乎会阻塞……在生产中它真的是异步的吗?我知道 Play 在开发模式下的线程较少,但我认为此时调用甚至不会开始执行。
  • 如果其中一个 URL 无法访问,我不确定如何记录失败的 URL(如何从 WS.HttpResponse 对象访问 URL)

因此,我转而使用同步 HTTP 而不是异步。以下实现似乎有效:

private static boolean checkUrlsAreReachable(String... urls) {
checkArgument(urls.length > 0);

List<F.Promise<Boolean>> promises = newArrayList();
for (final String url : urls) {
promises.add(new Job<Boolean>(){
@Override
public Boolean doJobWithResult() throws Exception {
try {
WS.HttpResponse result = WS.url(url).followRedirects(true)
.timeout("30s").get();
return result.success();
} catch (Exception e) {
return false;
}
}
}.now());
}
F.Promise<List<Boolean>> allResults = F.Promise.waitAll(promises);
List<Boolean> booleans = await(allResults);
return Booleans3.and(booleans);
}

有没有办法让异步实现工作?

最佳答案

在application.conf中设置作业池设置部分

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
play.jobs.pool=20

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
play.pool=5

只需将检查部分放入作业中,例如 CheckingJob,然后使用

启动它
new CheckingJob().now()

它将是异步的。

关于java - 有什么好的、健壮的、异步的方法来检查 Play Controller 中的 URL 是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8790086/

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