在我的application.properties
文件中,我有...
server.port=8086
server.connection-timeout=15000
我知道文件正在正确加载,因为服务器在端口8086上运行。
在应用程序中,我有一个RestController
@RestController
class TestController {
@GetMapping()
fun getValues(): ResponseEntity<*> {
return someLongRunningProcessPossiblyHanging()
}
}
当我调用endpoint时,请求永远不会超时,它只是无限期地挂起。
我错过了什么吗?
注意:我还被告知,Tomcat使用这个字段是以分钟为单位,而不是以毫秒为单位(这在我看来是相当不寻常的选择)。我试着将它设置为< code > server . connection-time out = 1 表示1分钟,但这也不起作用。
注意:我不希望另一个HTTP请求导致前一个请求超时,我希望每个HTTP请求都自行超时,因为需要太多时间来处理请求。
当我调用endpoint时,请求永远不会超时,它只是无限期地挂起。
服务器。连接超时
不是请求超时。这是空闲连接的超时,即那些已经有请求/响应对并且服务器现在正在等待第二个请求的连接。它本质上是服务器端读取超时。
来自官方文档:
服务器连接超时=#连接器在关闭连接之前等待另一个HTTP请求的时间。未设置时,将使用连接器的容器特定默认值。使用值-1表示无(即无限)超时。
另一个裁判,也提到了同样的。它应该对你有用。
conttion-timeout
不适用于长时间运行的请求。它确实适用于初始连接,当服务器等待客户端说些什么时。
Tomcat docs(不是Spring Boot)将其定义为连接器在接受连接后等待请求URI线路出现的毫秒数[...]
为了测试设置< code > server . connection-time out = 4000 ,我使用< code>netcat进行连接,但没有发送任何HTTP请求/头。我明白了:
$ time nc -vv localhost 1234
Connection to localhost 1234 port [tcp/*] succeeded!
real 0m4.015s
user 0m0.000s
sys 0m0.000s
替代品
1)异步
来自brightinventions.pl - Spring MVC线程池超时:
在SpringMVC中,除非使用异步方法,否则无法配置超时。使用异步方法,可以使用spring.mvc.async。请求超时=设置异步请求处理超时之前的时间量(以毫秒为单位)。
我已经设置了spring.mvc.async.request-timeout=4000
,我在浏览器中得到了一个超时,如下所示:
@GetMapping("/test-async")
public Callable<String> getFoobar() {
return () -> {
Thread.sleep(12000); //this will cause a timeout
return "foobar";
};
}
请参阅Spring Boot REST API-请求超时?
2)Servlet过滤器
另一个解决方案是使用servlet过滤器brightinventions.pl -在Spring MVC (Kotlin)中请求超时:
override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain) {
val completed = AtomicBoolean(false)
val requestHandlingThread = Thread.currentThread()
val timeout = timeoutsPool.schedule({
if (completed.compareAndSet(false, true)) {
requestHandlingThread.interrupt()
}
}, 5, TimeUnit.SECONDS)
try {
filterChain.doFilter(request, response)
timeout.cancel(false)
} finally {
completed.set(true)
}
}
3) Tomcat卡住Thread检测阀?
Tomcat有一个卡住的线程检测阀,但我不知道是否可以使用Spring Boot进行编程配置。
我使用快速和连接超时中间件来处理超时。 它工作得很好,但是我默认的服务器的超时设置为两分钟。 因此,如果我想将超时中间件设置为大于两分钟的值,我还必须将http服务器超时增加到稍大一点(否则我的连接超时处理程序不会被调用) 我怎样才能避免这种情况?我错过什么了吗?
当我尝试使用套接字将物理设备连接到服务器时,我遇到了一个问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。你知道为什么会这样吗? 我在下面提供我的代码 服务器代码: 客户端: 11-16 23:32:11.016:W/系统。错误(24213):java.net。ConnectException:无法连接到/192.168.1.116(端口9090):连接失败:ETIMEDOUT(连接
我有一个ldap服务器,我想在这个ldap中使用spring security。我的连接配置是: 我的错误是什么?
问题内容: 尝试通过以下代码连接到 openfire 服务器时: 我得到一个异常说: 这可能是什么原因? 注意 :我已经允许openfire消防服务器通过防火墙。我也尝试过关闭防火墙,但是结果相同。服务器是我自己的机器。我尝试在其上运行程序的同一台计算机。 问题答案: 您可以使用 或者如果您想指定端口 或类似,默认为端口5222
我目前正在使用php。我想将PHP与sql服务器连接,但它不能在生产服务器上工作。它在我的本地机器上工作得很好,因为我在php的扩展文件夹中安装了sql服务器驱动程序,并在php-ini文件中激活了它。我确认驱动程序已经加载到生产驱动程序中,因为它托管在windows服务器中,而不是linux服务器中。我需要帮助,因为相同的脚本,我连接我的本地机器到云sql服务器是相同的脚本,我现在使用连接PHP
所以我有我的 Amazon RDS 实例,我允许我的 EC2 组让所有内容都连接,并且可以在脚本从我自己的机器运行时(使用 XAMPP 安装)完全建立 PDO 连接。 然而,当我从服务器上运行时,我得到一个 错误 从我自己的机器上运行脚本时不会出现此错误,我可以在那里很好地连接到数据库,进行插入和选择等。但是一旦我在我的实际EC2服务器上,blip总是无法连接。此外,它无法连接到任何MySQL实例