2012-06-27 12 views
10

私はPlayフレームワークとAkkaを使用してプログラミングを始めました。私は今、デフォルト/基本的なPlay環境で概念実証アプリケーションを開始しています。私の質問は、PlayのWebサービスクライアントAPI(http://www.playframework.org/documentation/2.0.1/ScalaWS)に由来しています。Akkaを使用してPlayアプリケーションからWebサービスコールを作成

このアプリケーションは、基本的に、リモートSOAP Webサービスへの呼び出しをスケーラブルでパフォーマンスの高い方法で仲介する必要があります。ブラウザはJSONでajax呼び出しを行い、応答時にはPlayアプリケーションでSOAP/XMLに変換する必要があり、逆も同様です。

コントローラを介して直接プレイWebサービスクライアントを使用した場合、これらの呼び出しは非同期になる可能性があります。これは、現在行っている処理(ブロッキング)よりも優れています。しかし、これが正確にどのように重い負荷の下で動作するかについて私は明確ではない。並行性/スレッド管理は、基本となるNettyサーバにほとんど委ねられますか?それを調整する方法はありますか?

コントローラからのアクタアクターシステムを使用して、ルーティングポリシー、プールサイズ、フォールトトレランスなどを制御する方法もあります。このアプローチを採用すると、Playの非同期WSクライアント?もしそうなら、(Futuresを構成する)このアプローチは推奨されるパターンでしょうか?

Akkaのアプローチをより魅力的にしてくれるもう一つの要因は、このアプリケーションが最終的にはいくつかの責任を負うことになるため、このActorSystemに許可されるリソースを制御/調整し、 SOAPサービス。あなたが詳述されている2つのオプションがうまくいく

答えて

5

  • 同じことを行うと、あなたの俳優に同期あなたのWS呼び出しを管理するために
  • 非同期リクエスト/レスポンスを処理するために、WSのための使用アッカをプレイAPIを使用します

まず、適切かどうかの解決法はありません。

The Play! WS APIソリューションは実装とテストが最も簡単です。コミュニティの多くの人々がそれに頼っています(私はそうしています)。

一方、Akkaソリューションでは、設定するにはそれほど重くなくても、将来の柔軟性が向上します。 を使用して、非同期計算の約束をするだけです。 implicit conversions between play promises and akka futureもあります。最後に、あなたの俳優を監視するために、Typesafe consoleを見ることができます。

パフォーマンスが大きい場合は、時期尚早の最適化はしばしばより複雑な(そして不要な)複雑さにつながります。私が心配している限り、私はAPI WSで始まり、将来必要に応じてAkkaソリューションに移行します。

+2

実際には、私は二重非同期の一種だと思っていました。アクターは引き続きWS API(または基礎となるning async httpclient)を使用できますか? – anchormath

+0

WSリクエストで約束を取り戻します。俳優はそれを引き続き使用することができます。 – iwalktheline

関連する問題