在我玩! 2.1 Rest API App我已經安裝了New Relic。忽略異步等待玩! Scala App在New Relic
我所有的控制器操作都從一個方法中繼承,該方法會爲響應的將來增加一個超時。如果任何此類方法花費的時間超過20秒,則請求被終止,結果爲5XX錯誤。
的代碼基本上是這樣的:
val timeout = 20
action(request).orTimeout(
name + " backend timed-out after "+timeout+" seconds", timeout * 1000).map {
resultOrTimeout => { //... process response or timeout with fold
我遇到的問題是,在分析新遺蹟中的數據時,即時得到那個總是20秒平均響應時間。
查看跟蹤時,我可以看到新遺蹟將超時函數解釋爲響應的容器。
Slowest components Count Duration %
Async Wait 7 20,000 ms 100%
Action$$anonfun$apply$1.apply() 2 2 ms 0%
PlayDefaultUpstreamHandler$$an....apply() 1 1 ms 0%
PlayDefaultUpstream....$$anonfun$24.apply() 1 1 ms 0%
SmaugController$class.akkify() 1 0 ms 0%
PlayDefaultUpstreamHandler.handleAction$1() 1 0 ms 0%
Total 20,000 ms 100%
有沒有什麼辦法可以阻止新的遺物從考慮到超時?
謝謝!
編輯:我擴大了交易,以獲得更多信息:
Duration (ms) Duration (%) Segment Drilldown Timestamp
20,000 100.00% HttpRequestDecoder.unfoldAndFireMessageReceived()
20,000 100.00% Async Wait
Stack trace
scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:23)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1146)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
java.lang.Thread.run (Thread.java:679)
107 0.53% SmaugController$class.akkify()
正如你所看到的,真正的工作正在在akkify方法,這需要107毫秒完成,其餘正在被消耗異步等待電話
在結束它與Play 2.1.1一起工作。重要的是Promise.timeout和Future.firstCompletedOf方法。新的文物正確地報告時間並不需要Action.async方法。 – dgrandes