第二部分:创建第一个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、在设备组里添加查询功能