簡體   English   中英

在Spring 3.0應用程序中設置最大響應時間

[英]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,我們正在通過糖蜜爬行!然后重試。如果您多次獲得此頁面,那么您真的很無聊!”

現在看來,我可以通過幾種方式來做到這一點(按我的意願排序)

  • 在春季,我也許可以設置超時並加載其他jsp
  • 在負載均衡器中,我可以通過重定向設置超時
  • 在tomcat中,我可以設置超時並加載其他jsp
  • 在Apache中,我可以通過重定向來設置一個tomcat
  • 在應用程序中,我將體系結構拆分為在線程中運行,該線程每100毫秒進行一次輪詢,以查看其是否已停止運行,並在2500毫秒后拋出異常

如果我沒記錯的話,所有對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM