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