我怎樣才能可靠地檢測到,在我的代碼深處,是否從任務隊列調用處理程序的當前調用?如何可靠地檢測到代碼正在從任務隊列中執行?
我的理解是,在GAE/J,如果我檢查了HttpServletRequest
對象,我可以檢查是否following headers設置:
X-AppEngine-QueueName
X-AppEngine-TaskName
X-AppEngine-TaskRetryCount
X-AppEngine-FailFast
X-AppEngine-TaskETA
其中任何這些頭文件的存在表明處理程序正在被任務隊列調用。
但是說我需要做檢測的代碼部分深處在幾個抽象層中,在那裏我不能訪問HttpServletRequest
對象,有什麼方法可以可靠地檢測當前執行環境是否正在從任務隊列調用還是不?
我所希望的是,有可能是喜歡方便的東西:
SystemProperty.environment.value() == Value.TaskQueue
類似於我們可以檢查代碼是否在GAE或在開發服務器使用SystemProperty.environment.value() == Value.Development
正在執行的方式。
什麼阻止你在'doPost()'中檢查頭並將結果傳遞給你的抽象邏輯,例如作爲'fromTaskQueue'布爾值? – alex 2012-04-22 13:52:53
@alex:需要檢查的部分被深埋在抽象層中,我想保持我的體系結構鬆散耦合,傳遞變量會使其不那麼靈活。 – 2012-04-22 14:19:05
抽象層的要點是抽象;你不應該避免這種抽象破壞你的代碼嗎? – 2012-04-23 01:39:54