在 Micronaut 服务器上配置传入 HTTP 请求的服务器超时

问题描述 投票:0回答:1

如果 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";
    }

}

问题是,无论我对超时配置使用什么属性,我的应用程序似乎都不会强制执行响应超时,并且我仍然会收到超过我尝试使用的超时的响应。我尝试了许多不同的属性,但仍然没有执行。

此用例的正确配置值是多少?我还漏掉了什么吗?

http timeout micronaut
1个回答
0
投票

在应用程序级别的 Micronaut 中强制传入 HTTP 请求超时的正确方法,尤其是控制服务器在发送响应之前应等待的时间,无法通过 application.yaml 中的简单服务器配置属性直接获得。相反,请考虑在控制器的方法中实现自定义超时逻辑,可能使用反应式编程模式(例如,RxJava 或 Project Reactor)将超时应用于请求的处理。这种方法允许您指定一个超时持续时间,在此之后操作将被取消(如果未完成),但它需要手动处理,并且更适合采用反应式编程设计的应用程序。 Micronaut 中的直接服务器端超时设置(例如读取超时或空闲超时)通常管理连接保持活动行为,而不是处理控制器方法的超时。

© www.soinside.com 2019 - 2024. All rights reserved.