package main import ( "cicv-data-closedloop/common/config/c_log" "cicv-data-closedloop/kinglong/common/cfg" "cicv-data-closedloop/kinglong/common/log" commonService "cicv-data-closedloop/kinglong/common/svc" controlConfig "cicv-data-closedloop/kinglong/control/pkg/cfg" commonConfig "cicv-data-closedloop/pji/common/cfg" "net/rpc" "time" ) func init() { //runtime.GOMAXPROCS(1) // 初始化日志配置 log.InitLogConfig() // 初始化本地配置文件(第1处配置,在本地文件) cfg.InitLocalConfig() // 初始化Oss连接信息 cfg.InitOssConfig() // 初始化业务逻辑配置信息,配置文件在oss上(第2处配置,在oss文件) cfg.InitCloudConfig() // 首先初始化平台配置。 cfg.InitPlatformConfig() // 初始化rpc客户端,用于杀死旧的采集程序 controlConfig.InitRpcClient() } func main() { // 轮询任务接口判断是否有更新 for { time.Sleep(time.Duration(1) * time.Second) // 1 获取当前设备的任务的 status status, err := cfg.GetStatus(cfg.PlatformConfig.TaskConfigId) if err != nil { log.GlobalLogger.Error("获取配置status失败:", err) continue } // 2 判断 status // UN_CHANGE 没有新的任务,无需更改 // CHANGE 有新的任务,需要杀死旧的任务并重启 // NONE 设备没有配置任务,需要杀死旧的任务 if status == "UN_CHANGE" { continue } else if status == "CHANGE" || status == "NONE" { // 发送rpc信号杀死两个服务,并重启程序 var masterArgs *commonService.KillSignal var slaveArgs *commonService.KillSignal if status == "CHANGE" { masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true} c_log.GlobalLogger.Info("更新任务,发送rpc重启信号到主节点:", masterArgs) slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: true} c_log.GlobalLogger.Info("更新任务,发送rpc重启信号到从节点:", slaveArgs) } if status == "NONE" { masterArgs = &commonService.KillSignal{NodeName: "master", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false} c_log.GlobalLogger.Info("杀死任务,发送rpc结束信号到主节点:", masterArgs) slaveArgs = &commonService.KillSignal{NodeName: "slave", DropUploadData: cfg.PlatformConfig.DropUploadData, Restart: false} c_log.GlobalLogger.Info("杀死任务,发送rpc结束信号到从节点:", slaveArgs) } KillRpcClientMaster, err := rpc.Dial("tcp", commonConfig.CloudConfig.Hosts[0].Ip+":"+commonConfig.CloudConfig.RpcPort) if err != nil { log.GlobalLogger.Error("创建rpc客户端连接master失败:", err) // 此处关闭client会报错 continue } KillRpcClientSlave, err := rpc.Dial("tcp", commonConfig.CloudConfig.Hosts[1].Ip+":"+commonConfig.CloudConfig.RpcPort) if err != nil { log.GlobalLogger.Error("创建rpc客户端连接slave失败:", err) // 此处关闭client会报错 continue } reply := 0 if err = KillRpcClientMaster.Call("KillService.Kill", masterArgs, &reply); err != nil { log.GlobalLogger.Error("发送rpc请求到master失败:", err) KillRpcClientMaster.Close() continue } if err = KillRpcClientSlave.Call("KillService.Kill", slaveArgs, &reply); err != nil { log.GlobalLogger.Error("发送rpc请求到slave失败:", err) KillRpcClientSlave.Close() continue } // 获取一下最新配置 cfg.InitPlatformConfig() KillRpcClientMaster.Close() KillRpcClientSlave.Close() } else { log.GlobalLogger.Error("未知的采集任务状态。status=", status) } } }