如何在 grails 中实现请求超时?

Posted

技术标签:

【中文标题】如何在 grails 中实现请求超时?【英文标题】:How do I implement a request timeout in grails? 【发布时间】:2011-04-11 23:02:22 【问题描述】:

我希望能够在 grails 中设置可配置的(通过控制器/操作)请求超时。目标是以确定性的方式处理罕见的高负载故障模式。例如,我知道如果给定的控制器/动作没有在 30 秒内返回,那么就说明出了问题,我不想让用户挂起。

如果可能,我希望在应用程序逻辑中处理此问题,因为可能会根据事件的条件进行合理的恢复或消息传递。

过滤器不起作用,因为时间可能在请求处理生命周期的任何地方到达。

【问题讨论】:

见***.com/questions/2907516/… @Tom - 我认为这不是那个的副本。引用的问题是关于会话超时;这是每个请求。 @Rob。是的,我的错。向@Chris Alef 道歉。 【参考方案1】:

我认为这并不容易实现。您可能受限于您正在使用的 Servlet 容器的功能。例如,使用 tomcat 你可以设置一个connectionTimeout。不幸的是,这可能无法为您提供所需的控制,因为超时和响应更多地受容器支配。

您可能有一种方法可以使用后台线程、计时器、中断和一些黑魔法来实现,但这可能是不明智的做法。

我在该主题上找到了几个邮件列表讨论:

http://grails.1312388.n4.nabble.com/How-to-change-request-timeout-td1356007.html

Peter Led*** 从内部引用:

我不知道 Grails 的功能 这。它支持会话时间 out,但不是请求超时。 Servlet 容器有连接 超时。

http://www.mail-archive.com/users@tomcat.apache.org/msg38090.html

【讨论】:

以上是关于如何在 grails 中实现请求超时?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中实现请求超时?

如何在可配置的超时时间内响应 Rails 请求

Scala - 使用超时重试HTTP请求

在 .NET 4 中实现正则表达式超时

使用Promise.race实现超时机制取消XHR请求

Kubernetes 准入请求超时后,defer 函数还会执行吗?