2012-03-06 62 views
6

隨着Akka 2的發佈,Akka HTTP modules已被替換爲使用Play2-mini的選項,其中Play2-mini看起來像Play2減去模型視圖控制器。混合Akka 2,Play2-mini框架和HTTP

該行在執行REST服務和創建HTTP客戶端之間灰顯。例如,假設我想在一個服務中創建一個Web服務(不必是REST)和一個HTTP客戶端,即HTTP代理。我使用Akka還是Play2-mini?

我已經在Finagle中創建了這樣的服務,並且希望用Akka和/或Play2-mini重做練習來了解它的比較。

在高層次,架構是什麼樣子的?這些產品如何融合在一起?

+1

您可能會發現[噴霧](https://github.com/spray/spray)有趣。它建立在Akka(現在1.3,但遷移到Akka 2在路線圖中)之上,並且具有服務器和客戶端。我希望我不會在這裏頑強,只是認爲噴霧值得一些關注。 – elbowich 2012-03-06 17:57:17

+0

@elbowich謝謝。如果你知道任何這樣的噴霧作爲代理或網關的例子,我很想看看它。我試圖圍繞創建任何基於Scala的解決方案所需的一切構建我的技能集。有這麼多的選擇,在某些時候必須選擇一個並堅持下去。我只是不知道哪些......尚;-)我認爲TypeSafe堆棧(Scala,Akka,Play)有很大的希望。這只是有點混淆 – Jack 2012-03-07 07:43:43

+1

在這裏你去:https://gist.github.com/2008342。你需要噴霧服務器,噴霧客戶端和噴霧罐來運行它。 – elbowich 2012-03-09 20:10:37

回答

3

我會說噴霧是你最好的選擇。但是,它不能用於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。