通過一段時間的學(xué)習(xí)了解,加深了一些對Akka的認(rèn)識,特別是對于Akka在實際編程中的用途方面。我的想法,或者我希望利用Akka來達(dá)到的目的是這樣的:作為傳統(tǒng)方式編程的老兵,我們已經(jīng)習(xí)慣了直線流程方式一口氣實現(xiàn)完整的功能。如果使用Akka,我們可以把這個完整的功能分切成多個能產(chǎn)生中間臨時結(jié)果的小功能然后把這些功能放到不同的Actor上分別獨立運算,再通過消息來連接這些功能集合成最終結(jié)果。如此我們就輕易得到了一個多線程并發(fā)程序。由于Akka是軟件工具(Tool),沒有軟件架構(gòu)(Framework)對編程方式的特別要求,Actor的構(gòu)建和使用非常方便,我們甚至不需要多少修改就可以直接把原來的一段代碼移到Actor上。如果遇到一些重復(fù)的運算,我們還可以用Routing來實現(xiàn)并行運算。當(dāng)然,把Actor當(dāng)作簡單的行令運算器可能還不夠,如果能實現(xiàn)一些具體運算之上的高層次程序邏輯和流程就更加完善。我們可以用這樣的高層次Actor去解析程序邏輯、執(zhí)行流程、把具體的運算分配給其它各種運算Actor或者一組Routees并行運算從而取得整體程序的高效率運行。具備了這些功能后,也許我們就可以完全用Actor模式來替代傳統(tǒng)單線程行令編程了。Akka可以通過Actor的動態(tài)行為轉(zhuǎn)換來實現(xiàn)同一Actor在不同情況下提供不同的功能支持。我們前面提到Actor的功能是在receive函數(shù)內(nèi)實現(xiàn)的。那么轉(zhuǎn)換功能是否就是切換不同的receive函數(shù)呢?答案是確定的,Akka是通過Actor的context.become(rcvFunc)來實現(xiàn)receive函數(shù)切換的,我們看看下面這個示范:
import akka.actor._object FillSeasons { case object HowYouFeel def props = Props(new FillSeasons) }class FillSeasons extends Actor with ActorLogging { import FillSeasons._ override def receive: Receive = spring def Winter: Receive = { case HowYouFeel => log.info("It's freezing cold!") } def summer: Receive = { case HowYouFeel => log.info("It's hot hot hot!") } def spring: Receive = { case HowYouFeel => log.info("It feels so goooood!") } }object Becoming&