From 56307a744dc94f9b1eed3f7513a4be16a130e984 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 17 十月 2023 17:20:25 +0800
Subject: [PATCH] 定时同步任务状态

---
 main.go |   64 ++++++++++++++++++++++++--------
 1 files changed, 48 insertions(+), 16 deletions(-)

diff --git a/main.go b/main.go
index 97abfeb..8c631f7 100644
--- a/main.go
+++ b/main.go
@@ -6,12 +6,12 @@
 	"apsClient/model"
 	"apsClient/nsq"
 	"apsClient/pkg/logx"
+	"apsClient/pkg/sqlitex"
 	"apsClient/router"
+	"apsClient/serf"
+	"apsClient/service/plc_address"
 	"fmt"
 	"net/http"
-	"os"
-	"os/signal"
-	"syscall"
 	"time"
 )
 
@@ -25,17 +25,38 @@
 		return
 	}
 
-	if err := nsq.Init(); err != nil {
-		logx.Errorf("nsq Init err:%v", err)
-		return
+	//鍔犺浇plc鍐欏叆鍦板潃
+	plc_address.LoadAddressFromFile()
+
+	// 鍚姩鏁版嵁鍚屾
+	var serfStartChan = make(chan bool)
+	// 闇�瑕佸悓姝ョ殑琛�
+	var syncTables = []string{
+		"procedures",
+		"process_model",
+		"production_progress",
+		"work_order",
+		"task_status_sync",
 	}
 
-	if err := crontask.InitTask(); err != nil {
-		logx.Errorf("crontab task Init err:%v", err)
-		return
+	agent := serf.InitAgent("apsClient", syncTables, sqlitex.GetDB())
+	agent.RegisterClusterEvent(serfClusterEvent)
+	go agent.Serve(serfStartChan)
+	<-serfStartChan
+
+	// 鍒ゆ柇褰撳墠闆嗙兢鐘舵��
+	if agent.ClusterStatus != "slave" {
+		if err := nsq.Init(); err != nil {
+			logx.Errorf("nsq Init err:%v", err)
+			return
+		}
+		crontask.Once()
+		if err := crontask.StartTask(); err != nil {
+			logx.Errorf("crontab task Init err:%v", err)
+			return
+		}
 	}
 
-	go shutdown()
 	logx.Infof("apsClient start serve...")
 	server := &http.Server{
 		Addr:         fmt.Sprintf(":%d", conf.Conf.System.Port),
@@ -46,11 +67,22 @@
 	logx.Error(server.ListenAndServe().Error())
 }
 
-func shutdown() {
-	quit := make(chan os.Signal, 1)
-	signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM)
-	<-quit
+func serfClusterEvent(stat int) {
+	switch stat {
+	case serf.EventCreateCluster, serf.EventSlave2Master, serf.EventLeaveCluster:
+		if err := nsq.Init(); err != nil {
+			logx.Errorf("nsq Init err:%v", err)
+			return
+		}
+		crontask.Once()
+		if err := crontask.StartTask(); err != nil {
+			logx.Errorf("crontab task Init err:%v", err)
+			return
+		}
+	case serf.EventJoinCluster, serf.EventMaster2Slave:
+		nsq.Stop()
+		crontask.StopTask()
+	}
 
-	logx.Infof("apsClient exited...")
-	os.Exit(0)
+	logx.Infof("serf cluster event: %v", stat)
 }

--
Gitblit v1.8.0