0

私は 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());
    }
}
4

1 に答える 1

0

成功または失敗を区別するには、 scala.Eitherを使用します。したがって、回答の種類は次のようになります。

type Result = Future[Either[SQLException, MyDataType]]
于 2012-05-24T07:33:59.210 に答える