私のツールでは、ほとんどの処理にRX javaを使用しています。基本的に私が働いているツールのアイデアは、次のとおりです。複雑な処理フローで排出量をグループ化またはキャッシュする方法は?
- は
- は、いくつかの特定のルールを使用して断片に分割し、いくつかのソースからのペイロード(例えばHTMLファイル)を取得します。
- 各フラグメントは、非同期HTTPコール(なされるべき1つまたは複数のこのようなコールであることができる)
- 各フラグメントデータを使用し、その後全く同じHTTPコール(エンドポイント)
- を使用する可能性を介してフェッチされるいくつかの追加データを必要とするかもしれませんhttpエンドポイントから返されたフラグメントで何かを行う
- 処理されたすべてのフラグメントをペイロードに結合して処理済みのペイロードと呼びましょう 基本的に、私がすでに実装したフローは基本的には基本的にアイディア。 、私はいくつかのを改善する方法を考えている今
Observable.just("SOME_PAYLOAD_AS_STRING") .flatMap(payload -> splitToFragmentObservables(payload)) //Getting observables of fragments .concatMapEager(//concat all processed fragments fragment -> getServiceCallsObservable(fragment) //get service calls for all fragments .flatMap(this::doServiceCall) // do service call .reduce(new HashMap<>(), (all, result) -> { //reduce results into map all.addAll(result); return all; }) .map(all -> newFragmentWithData(fragment, all)) //apply somehow the all service results to my fragment ) .reduce(new StringBuilder(), StringBuilder::append) //reduce all fragments back to string .map(StringBuilder::toString);
:処理の擬似コードは次のようになりますので、図は、読み取り可能かどう
わかりません処理、特にHTTPコールを処理します。ダイアグラムで気づいたように、各フラグメントはまったく同じコール(A、BまたはC)を実行でき、これは不必要なオーバーヘッドです。
私は、各フラグメントで同じサービスコールを行うことを避ける方法を探しています。それを改善する最善の方法は何ですか?同じ電話をグループ化し、電話をかけて、最終結果を行うときに何とかそれを使用しますか?代わりにキャッシュするか?