控制台打印
Master
preStart invoked
0111
Worker
send heartbeat to master
send heartbeat to master
send heartbeat to master
send heartbeat to master
send heartbeat to master
send heartbeat to master
send heartbeat to master
send heartbeat to master
package com.lhh.copy
import java.util.UUID
import akka.actor.{Actor, ActorSelection, ActorSystem, Props}
import com.typesafe.config.ConfigFactory
import scala.concurrent.duration._
/**
* Created by lhh
*/classWorker(val masterHost: String, val masterPort: Int, val memory: Int, val cores: Int)extendsActor{var master : ActorSelection = _
val workerId = UUID.randomUUID().toString
val HEART_INTERVAL = 10000//overridedef preStart(): Unit = {
//跟Master建立连接
master = context.actorSelection(s"akka.tcp://MasterSystem@$masterHost:$masterPort/user/Master")
//向Master发送注册消息
master ! RegisterWorker(workerId, memory, cores)
}
overridedef receive: Receive = {
case RegisteredWorker(masterUrl) => {
println(masterUrl)
//启动定时器发送心跳import context.dispatcher
//多长时间后执行 单位,多长时间执行一次 单位, 消息的接受者(直接给master发不好, 先给自己发送消息, 以后可以做下判断, 什么情况下再发送消息), 信息
context.system.scheduler.schedule(0 millis, HEART_INTERVAL millis, self, SendHeartbeat)
}
case SendHeartbeat => {
println("send heartbeat to master")
master ! Heartbeat(workerId)
}
}
}
objectWorker {def main(args: Array[String]) {
val host = args(0)
val port = args(1).toInt
val masterHost = args(2)
val masterPort = args(3).toInt
val memory = args(4).toInt
val cores = args(5).toInt
// 准备配置val configStr =
s"""
|akka.actor.provider = "akka.remote.RemoteActorRefProvider"
|akka.remote.netty.tcp.hostname = "$host"
|akka.remote.netty.tcp.port = "$port"
""".stripMargin
val config = ConfigFactory.parseString(configStr)
//ActorSystem老大,辅助创建和监控下面的Actor,他是单例的val actorSystem = ActorSystem("WorkerSystem", config)
actorSystem.actorOf(Props(new Worker(masterHost, masterPort, memory, cores)), "Worker")
actorSystem.awaitTermination()
}
}
package com.lhh.copy
/**
* Created by lhh
*/classWorkerInfo(val id: String, val memory: Int, val cores: Int) {//TODO 上一次心跳var lastHeartbeatTime : Long = _
}