我會說噴霧是你最好的選擇。但是,它不能用於Java。我們正在使用play2-mini框架,但有一些問題。目前還不清楚如何將它與Java連接到Akka,而Spray則完全圍繞這個概念構建 - 當請求進入時,您會向演員請求消息。
一起玩,你必須推出自己的連接: 即,在靜態(角色眼)請求方法裏面:
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事件,因此您可以使用它的actor context來創建您的演員。
不幸的是,目前Play2-mini並不是最小的,它取決於整個Play框架,這也會導致更多的問題。顯然,他們正在製作一個裸機版本,AFAIK將涉及將Play分解成模塊,我不會很快看到這種情況。
IMO,噴霧是一個更好的選擇。這是fluentness適合多更好地AKKA,但unfort我要在這裏使用Java,所以我不能用它: https://github.com/spray/spray/issues/96
至於你的HTTP客戶端/服務的問題 - AKKA沒有任何HTTP功能本身,所以你需要與HTTP服務器接口,在這種情況下播放。您可以使用Async請求來保持連接的活動狀態,而您的actor系統將消息異步傳遞給您的http客戶端actor,以異步獲取http響應,將消息發送回web服務層,並返回播放狀態。
希望能澄清一些混淆。我也很困惑,直到幾天的研究;)如果還有什麼我可以幫忙澄清的,請讓我知道 - 爲了社區的利益! ;)
噴霧罐有一個異步HTTP客戶端,但對於我們卡在爪哇島的人,還有:https://github.com/sonatype/async-http-client,你可以使用AKKA。
您可能會發現[噴霧](https://github.com/spray/spray)有趣。它建立在Akka(現在1.3,但遷移到Akka 2在路線圖中)之上,並且具有服務器和客戶端。我希望我不會在這裏頑強,只是認爲噴霧值得一些關注。 – elbowich 2012-03-06 17:57:17
@elbowich謝謝。如果你知道任何這樣的噴霧作爲代理或網關的例子,我很想看看它。我試圖圍繞創建任何基於Scala的解決方案所需的一切構建我的技能集。有這麼多的選擇,在某些時候必須選擇一個並堅持下去。我只是不知道哪些......尚;-)我認爲TypeSafe堆棧(Scala,Akka,Play)有很大的希望。這只是有點混淆 – Jack 2012-03-07 07:43:43
在這裏你去:https://gist.github.com/2008342。你需要噴霧服務器,噴霧客戶端和噴霧罐來運行它。 – elbowich 2012-03-09 20:10:37