使用 Akka 实现 Master 与 Worker 之间的通信

MessageProtocol.scala
package top.gldwolf.scala.akkademo.sparkmasterandworker.common

/**
 * @author: Gldwolf
 * @email: ZengqiangZhao@sina.com
 * @date: 2020/4/17 10:54
 */

/**
 * 用于 Work 注册时发送注册信息
 */
case class WorkerRegisterInfo(id: String, cpu: Int, ram: Int) {
   

}

/**
 * 用于保存到 Master 的 HashMap 中
 */
class WorkerInfo(var id: String, cpu: Int, ram: Int) {
   
    var lastHeartBeatTime = System.currentTimeMillis()
}

/**
 * 注册成功后,Master 回应此类型的消息,表示注册成功
 * Worker 接收到后,启动心跳机制
 */
case object RegisteredInfo

/**
 * worker 每隔一定时间由定时器发给自己的一个消息,用于触发自己给 Master 发送消息
 */
case object SendHeartBeat

/**
 * 由自己的消息触发,然后给 Master 发送 HeartBeat 消息,消息要带上自己的 id
 */
case class HeartBeat(id: String)

/**
 * Master 给自己发送一个触发检查超时 Worker 的消息,定时获取已离线的 Worker
 */
case object StartCheckTimeOutWorker

/**
 * Master 给自己发消息,检测 Worker 是否已离线,如果已离线,则移除
 */
case object RemoveTimeOutWorker
SparkWorker.scala
package top.gldwolf.scala.akkademo.sparkmasterandworker.worker

import akka.actor.{
   Actor, ActorRef, ActorSelection, ActorSystem, Props}
import com.typesafe.config.{
   Config, ConfigFactory}
import top.gldwolf.scala.akkademo.sparkmasterandworker.common.{
   HeartBeat, RegisteredInfo, SendHeartBeat, WorkerRegisterInfo}

import scala.concurrent.duration.FiniteDuration

/**
 * @author: Gldwolf
 * @email: ZengqiangZhao@sina.com
 * @date: 2020/4/17 10:03
 */

object SparkWorker {
   
    def main(args: Array[String]): Unit = {
   
        if (args.length < 6) {
   
            println("参数个数不正确:host, port, workerName, masterName, masterHost, masterPort...")
            System.exit(-1)
        }
        val host = args(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值