如果 20 秒后无法返回响应,我需要将服务器配置为超时传入请求。
我已经尝试了 micronaut 文档此处中列出的几个 yaml 配置属性。无论我使用什么属性,服务器似乎都不会强制执行超时。
目前我的 application.yaml 文件在调试时看起来像这样,你可以看到我一次尝试了许多属性,但单独我也遇到了同样的问题。
micronaut:
http:
client:
read-timeout: 1ms
read-idle-timeout: 1ms
application:
name: oai-market-api
server:
port: ${PORT:8080}
read-timeout: 1
read-idle-timeout: 1ms
idle-timeout: 1ms
cors:
enabled: true
我正在测试的控制器看起来像这样
@Controller("market-status")
public class MarketStatusController {
public MarketStatusController() {}
@Get
public String getMarketStatus() throws InterruptedException {
Thread.sleep(5000);
return "foo";
}
}
问题是,无论我对超时配置使用什么属性,我的应用程序似乎都不会强制执行响应超时,并且我仍然会收到超过我尝试使用的超时的响应。我尝试了许多不同的属性,但仍然没有执行。
此用例的正确配置值是多少?我还漏掉了什么吗?
在应用程序级别的 Micronaut 中强制传入 HTTP 请求超时的正确方法,尤其是控制服务器在发送响应之前应等待的时间,无法通过 application.yaml 中的简单服务器配置属性直接获得。相反,请考虑在控制器的方法中实现自定义超时逻辑,可能使用反应式编程模式(例如,RxJava 或 Project Reactor)将超时应用于请求的处理。这种方法允许您指定一个超时持续时间,在此之后操作将被取消(如果未完成),但它需要手动处理,并且更适合采用反应式编程设计的应用程序。 Micronaut 中的直接服务器端超时设置(例如读取超时或空闲超时)通常管理连接保持活动行为,而不是处理控制器方法的超时。