简介:模拟用akka实现一个RPC分布式通信框架,实现从机向主机发送心跳,主机判断从机是否挂机,以及消息通信的简单功能。
开发平台:IntelliJ IDEA Maven架构
项目结构及依赖:
代码2个样例类:
case class Workinfo (val id:String) extends Serializable{
}
case class SendHearBeat (val id:String) extends Serializable{
}
Master类:
import akka.actor.{Actor, ActorSystem, Props}
import com.typesafe.config.ConfigFactory
import scala.concurrent.duration._
import scala.collection.mutable
class Master extends Actor{
//保存worker id
val workerMessage=new mutable.HashMap[String,Long]
//worker超时时间
val WORKEER_TIMEOUT=10 * 1000
override def preStart(): Unit ={
//导入隐式转换,用于启动定时器
import context.dispatcher
//启动定时
context.system.scheduler.schedule(0 millis,5000 millis,self,"CheckOfTimeOutWorker")
}
override def receive: Receive = {
//注册woker把workerid 和当前时间存起来
case Workinfo(id)=>{
if(!workerMessage.contains(id)) {
workerMessage.put(id, System.currentTimeMillis())
}
println("注册worker:"+id)
sender ! "MasterReply"
}
//接收worker心跳,更新接收时间
case SendHearBeat(id)=>{
workerMessage(id)=System.currentTimeMillis()
println("接收到worker:"