[英]Setting a maximum response time in a spring 3.0 application
我有一個Web應用程序,我們的產品負責人表示必須在2.5秒內響應並在3秒內可用。
現在,它主要是在薄片Spring MVC層之上的POJO,該層用於依賴項注入和將請求定向到控制器。
Webapp是一堆API之間的一塊很薄的肉,這些API正在構建中,以為一組非常古老的不規則API提供凝聚力。 其中一些可能會花費3秒以上的時間(盡管不是很頻繁)
我想要的是一種告訴spring或tomcat的方法,如果它沒有在2500ms內加載JSP,我想加載一個jsp,它告訴我們的用戶“ Dude,我們正在通過糖蜜爬行!然后重試。如果您多次獲得此頁面,那么您真的很無聊!”
現在看來,我可以通過幾種方式來做到這一點(按我的意願排序)
如果我沒記錯的話,所有對Spring MVC的請求都會通過一個過濾器。 您可能可以覆蓋它並設置超時設置(例如,使用帶有超時強制URL或路徑的可配置XML)。 Guava的TimeLimiter將是實現超時執行本身的好工具。
<general-rant>
我不知道您所從事的行業,但是通常在網絡世界中,如果響應沒有在2-3s內返回,則有點過於自殘,以至於恐慌,特別是如果長時間采取的響應只是少數的話(正如你所說)。 我有大型堆(Xmx = 10g)的經驗,其中僅GC可能需要幾分鍾才能完成。 好的,也許這是一個高估的示例,但是使用一兩秒鍾的GC還是很合理的。
甚至Tomcat手冊說很小的超時也會適得其反 。 您的產品負責人必須是膽怯的:)
</general-rant>
啊,還有更多。 別忘了,如果您已經將某些內容發布回了servlet響應中,那么您就不能重定向。 因此,您可能需要延遲響應,直到完成最后的計算,然后最后清除所有內容。 這意味着您必須用裝飾器包裝HttpServletResponse
,該裝飾器具有某種閂鎖,該閂鎖會延遲響應輸出,直到生成完整的響應,或者如果發生超時-重定向到“ ouch”頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.