6

Akka 2 のリリースにより、Akka HTTP モジュールはPlay2-miniを使用するオプションに置き換えられました。ここで、Play2-mini は Play2 からモデル ビュー コントローラーを除いたものに見えます。

REST サービスの実装と HTTP クライアントの作成の間の線はグレー表示されています。たとえば、Web サービス (REST である必要はありません) と HTTP クライアントを 1 つのサービス (つまり、HTTP プロキシ) で作成したいとします。Akka と Play2-mini のどちらを使用しますか?

Finagle でこのようなサービスを作成しましたが、Akka や Play2-mini を使用してこの演習をやり直して、比較する方法を確認したいと思います。

大まかに言うと、アーキテクチャはどのようなものですか? これらの製品はどのように組み合わされますか?

4

2 に答える 2

3

スプレーが最善の策だと思います。ただし、Javaでは使用できません。play2-miniフレームワークを使用していますが、いくつかの問題があります。概念に完全に基づいて構築されているSprayと比較して、Javaを使用してAkkaに接続する方法は明確ではありません。リクエストが着信すると、アクターにリクエストメッセージが届きます。

Playでは、独自の接続をロールする必要があります。つまり、静的(ロールアイ)リクエストメソッド内で:

Timeout timeout = new Timeout(Duration.parse("20 seconds"));
Future<Object> future = Patterns.ask(myActor, new ClientMessage(null), timeout);

Promise<Object> sdf = Akka.asPromise(future);
Promise<Result> r2 = sdf.map(new Function<Object, Result>() {

@Override
public Result apply(Object a) throws Throwable {
    val wsrm = (MyMessage)a;
    return ok((wsrm).val); // String value from message object
}

});
Result test2 = async(r2);
return test2;

これはうまくいきます。また、PlayはシステムでもAKKAイベントを使用するため、アクターコンテキストを使用してアクターを作成することもできます。

残念ながら、現在、Play2-miniはまったくミニではなく、Playフレームワーク全体に依存しているため、さらに多くの問題が発生します。どうやら彼らはベアボーンリリースに取り組んでいるようで、AFAIKはPlayをモジュールに分割することを含む予定であり、それがすぐに起こるとは思わない。

IMO、スプレーははるかに良い選択です。流暢さはAKKAに はるかによく適合しますが、残念ながらここではJavaを使用する必要があるため、使用できませんでした: https ://github.com/spray/spray/issues/96

httpクライアント/サービスの質問に関して-AKKAにはHTTP機能自体がないため、HTTPサーバーとインターフェイスする必要があります。この場合は再生します。アクターシステムが非同期でメッセージをhttpクライアントアクターに渡し、非同期でhttp応答を取得し、メッセージをWebサービスレイヤーに送り返し、再生に戻す間、非同期リクエストを使用して接続を維持できます。

うまくいけば、それはいくつかの混乱を解消します。数日間の調査まで、私もかなり混乱していました;)何か他に解決できることがあれば、私に知らせてください-コミュニティの利益のために!;)

スプレーには非同期httpクライアントを含めることができますが、Javaの世界で立ち往生している私たちにとっては、https ://github.com/sonatype/async-http-clientもあります。これはおそらくAKKAで使用できます。

于 2012-04-12T14:31:39.293 に答える
1

この質問をしてから、Akka の公式ブログで次の素晴らしい投稿を見つけました。

http://letitcrash.com/post/17888436664/a-sample-application-showcasing-play-mini-and-akka

于 2012-04-19T12:52:46.313 に答える