package main import ( "apsClient/conf" "apsClient/crontask" "apsClient/model" "apsClient/nsq" "apsClient/pkg/logx" "apsClient/pkg/sqlitex" "apsClient/router" "apsClient/serf" "apsClient/service/plc_address" "fmt" "net/http" "time" ) func main() { logx.Init(conf.Conf.Log) defer logx.Sync() if err := model.Init(); err != nil { logx.Errorf("model Init err:%v", err) return } if err := crontask.InitTask(); err != nil { logx.Errorf("crontab task Init err:%v", err) return } //加载plc写入地址 plc_address.LoadAddressFromFile() // 启动数据同步 var serfStartChan = make(chan bool) // 需要同步的表 var syncTables = []string{ "procedures", "process_model", "production_progress", "work_order", } 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 } } logx.Infof("apsClient start serve...") server := &http.Server{ Addr: fmt.Sprintf(":%d", conf.Conf.System.Port), Handler: router.InitRouter(), ReadTimeout: 5 * time.Second, WriteTimeout: 5 * time.Second, } logx.Error(server.ListenAndServe().Error()) } 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 } case serf.EventJoinCluster, serf.EventMaster2Slave: nsq.Stop() } logx.Infof("serf cluster event: %v", stat) }