第二部分:創建第一個actor
akka版本2.5.8
版權聲明:本文爲博主原創文章,未經博主允許不得轉載。
在前面我們已經瞭解了actor的層級結構和行爲,接下來問題就是如何將我們物聯網系統的頂層組件映射到actor上。你可能會想到用頂級actor來表示設備和儀表盤,相反的,我們建議創建一個顯式的組件來代表整個應用程序。換句話說,在我們的物聯網系統中,只會存在一個頂級actor。這個組件創建並管理我們的設備和儀表盤,並把它們作爲子actor。這允許我們將實例代碼結構重構爲以下actor樹:
在應用程序開始,我們可以簡單的幾行代碼定義一個actor:IotSupervisor
:
1、在
com.lightbend.akka.sample
包下創建一個新的IotSupervisor
源文件
2、把下面的代碼粘貼到IotSupervisor文件裏
package com.lightbend.akka.sample
import akka.actor.{ Actor, ActorLogging, Props }
object IotSupervisor {
def props(): Props = Props(new IotSupervisor)
}
class IotSupervisor extends Actor with ActorLogging {
override def preStart(): Unit = log.info("IoT Application started")
override def postStop(): Unit = log.info("IoT Application stopped")
// No need to handle any messages
override def receive = Actor.emptyBehavior
}
這個代碼和之前的實例代碼很像,不過需要注意的是:
我們使用了
ActorLogging
助手特質而不是println()
,它可以直接調用Akka內置的日誌組件
我們使用了推薦的創建actor方式,在actor的伴生對象內定義props()
方法
添加一個新的IotApp
伴生對象來提供創建整個系統的入口main方法。
package com.lightbend.akka.sample
import akka.actor.ActorSystem
import scala.io.StdIn
object IotApp {
def main(args: Array[String]): Unit = {
val system = ActorSystem("iot-system")
try {
// Create top level supervisor
val supervisor = system.actorOf(IotSupervisor.props(), "iot-supervisor")
// Exit the system after ENTER is pressed
StdIn.readLine()
} finally {
system.terminate()
}
}
}
這個程序沒有啥東西,就打印出來它啓動了。但是我們有了第一個actor,之後我們準備添加其他的actor。
下一步要做什麼
在接下來的章節中,我們將逐步擴展我們的應用:
1、爲誰被創建表示體
2、創建設備的管理組件
3、在設備組裏添加查詢功能