我有一个网络应用程序,我们的产品所有者声明必须在2.5秒内响应并在3秒内可用。
现在,它主要是在一个切成薄片的Spring MVC层之上的POJO,它用于依赖注入并将请求定向到控制器。
webapp是一堆非常薄的肉片,它们被构建用于为不同的非常古老的不规则API提供凝聚力。其中一些可能需要超过3秒(虽然不常见)
我想要的是一种告诉spring或tomcat的方法,如果它没有在2500ms内加载JSP我想加载jsp告诉我们的用户“Dude,我们在这里通过糖蜜爬行!”给我们一秒钟再试一次。如果你多次得到这个页面,那么你真的很棒!“
现在看起来我可以通过几种方式做到这一点(按照我的愿望排序)
答案 0 :(得分:0)
如果我没记错的话,所有对Spring MVC的请求都是通过一个过滤器进行的。您可以覆盖它并编写超时设置(例如,具有可配置的XML,其中包含超时强制的URL或路径)。 Guava的TimeLimiter将是实现超时实施的好工具。
<general-rant>
我不知道你所在的行业,但一般来说,在网络世界中,如果一个回复没有在2-3s内回复,那么恐慌是有点过于自我要求,特别是如果长时间回应是只是少数(如你所说)。我有大堆(Xmx = 10g)的经验,只需一个GC可以花费几个分钟来完成。好吧,也许这是一个被高估的例子,但是一两秒钟服用GC是非常合理的。
即使Tomcat manual说非常小的超时可能会适得其反。您的产品所有者必须胆怯:)
</general-rant>
HttpServletResponse
,该装饰器具有某种锁存器,该锁存器会延迟响应输出直到生成完整响应,或者如果发生超时 - 重定向到“ouch”页面。