1

ハンドラーの現在の呼び出しがタスク キューから呼び出されているかどうかを、コードの奥深くで確実に検出するにはどうすればよいでしょうか?

HttpServletRequestGAE/J では、オブジェクトを確認すると、次のヘッダーが設定されているかどうかを確認できることがわかりました。

  • 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

4

2 に答える 2

0

リクエストのヘッダーが含まれているかどうかをチェックすることにX-AppEngine-TaskNameなり、AlexRの提案のおかげで、チェック結果をスレッドローカル変数に保存しました。

以下の Eric Willigers のコメントに基づいて、Google はすでにX-AppEngine-TaskName外部リクエストからヘッダーを破棄し、ヘッダーを偽造しようとする悪意のある攻撃者からアプリを保護していることが判明したため、これはこれまでのところ最も安全なアプローチのようです.

于 2012-07-01T21:59:55.633 に答える
-1

スタック トレースを調べてみてください: new Throwable().getStackTrace(). これは の配列を返しますStackTraceElement。配列を反復処理して、キューからの呼び出しに典型的なクラスとメソッドを特定できます。

于 2012-04-22T13:42:49.460 に答える