スプレーが最善の策だと思います。ただし、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で使用できます。