私は Akka を既存のソフトウェアに統合しています。主に、同期してはいけない場所で物事を非同期にするためです。
私はいくつかのデータベース呼び出しを行っているサービスを持っていますが、現時点ではすべてが同期しており、呼び出し元のスレッドはここに座って結果を待っています...
私のアイデアは、DAO インターフェイスを置き換えて、Future<T>
実際の結果の型ではなく結果として (Akka の) を持つようにすることです。したがって、私の DAO 実装は、実際にこれらの呼び出しをメッセージで変換し、適切なアクター (ローカルおよび/またはリモート) にルーティングします。
Future<T>
アクターを呼び出したときに a を返す方法については、少し戸惑っています。を使う以外に方法はありますPatterns.ask()
か?それはパフォーマンスに関して(アクターを使用してすべてを書き直すことなく)最良のソリューションですか?
を使用Patterns.ask()
して、タイムアウトを待たずにエラーを返すにはどうすればよいですか? 私が呼び出したアクターが単にエラーを返した場合、失敗をトリガーしたいときに成功をトリガーします。
編集
私はJavaを使用しています。
今、私は以下のような構造を思いつきましたが、それは私のアクターがtell()
送信者に例外を返さなければならないことを意味します.
final Future<Object> f = Patterns.ask(..., ..., ...);
f.flatMap(new Mapper<Object, Future<List<Element>>>() {
public Future<List<Element>> apply(Object response) {
if (response instanceof SuccessfulResult) {
return Futures.successful(response, f.executor());
} else if (response instanceof Throwable) {
return Futures.failed((Throwable) response, f.executor());
} else {
return Futures.failed(..., f.executor());
}
}