2017-04-22 8 views
1

1つのリクエストで6つのステップが実行されるユースケースがあります。ビジネスは、各ステップの結果がどのプロセスにあるかに関するメトリクスを取得するよう要求しています。彼らは私たちがキネシスのストリームにログすることを望みます。Guice Requestリクエストのワークフローをトレースするスコープ

アーキテクチャ上私は最良のソリューションを検討しています。私たちはJavaベースのサービスを持っていますが、要求の進行に応じて要求スコープのオブジェクトを豊富にしたい場合、エンドポイントが終了すると、fireとforgetのパターンを使用して非同期のkinesisにサービスコールを行います。この方法では、レポートはメインスレッドを保持していません。

私は生のThreadLocalまたはguiceスコープを使用していました。誰もが似たような問題に遭遇して解決しましたか?私はguice要求スコープのコンポーネントを使用することを考え、大幅に単純にコードです。ちょうどいくつかの意見を探しています。ありがとう!

答えて

1

あなたはサーブレット環境にいないと仮定しています。それでもあなたは範囲guice-servletから自分でスコープを構築することができます。

void processRequest() { 
    RequestScoper scope = ServletScopes.scopeRequest(Collections.emptyMap()); 
    try (RequestScoper.CloseableScope ignored = scope.open()) { 
     step1(); 
     step2(); 
     step3(); 
     step4(); 
     step5(); 
     step6(); 
    } 
} 

あなたは@RequestScopedを使用することができますし、それはすべてのあなたのステップで同じオブジェクトになります。たとえば、プロバイダーを使用してそのプロバイダーにアクセスすることができます。

関連する問題