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()
|
}
|
|
fmt.Println("clusterEvent:", stat)
|
}
|