我有一个带有 HTTP GET 方法的 Java Web 应用程序,其中包含以下代码(在 servlet 内):
Certificate certificate = Observable.range(1, 10)
.delay(3, TimeUnit.SECONDS)
.filter(integer -> {
try {
LOG.info("AUTHORIZE ATTEMPTS: " + integer);
order.update();
} catch (AcmeException e) {
Exceptions.propagate(e);
}
return order.getStatus() == Status.VALID;
}).map(integer -> {
Certificate cert = order.getCertificate();
return cert;
}).toBlocking().first();
与 NGINX 单元相关的问题是,当使用 Jetty maven 插件在 localhost 中运行时,没有任何问题,但是当使用此应用程序配置与 NGINX 单元一起运行时:
{
"applications": {
"backend": {
"processes": 1,
"type": "java",
"options": [
"-Dlog_path=/var/log/backend-server-0-SNAPSHOT.log"
],
"webapp": "/var/www/backend-server-0-SNAPSHOT.war"
}
},
"listeners": {
"*:8080": {
"application": "backend"
}
}
}
上面的 Java 代码阻塞了整个 Web 应用程序,这意味着 Java Web 应用程序在 30 秒的持续时间内不能处理任何其他 HTTP 请求,因为 Observable.range(1, 10)
有 3 秒的延迟。
我想知道为什么 NGINX 单元会这样。预期的行为是 Web 应用程序应该仍然能够处理请求。