package main
|
|
import (
|
"aps_crm/conf"
|
"aps_crm/initialize"
|
"aps_crm/middleware"
|
"aps_crm/model"
|
"aps_crm/model/grpc_init"
|
"aps_crm/pkg/logx"
|
"aps_crm/proto/client"
|
"aps_crm/proto/crm_aps"
|
"aps_crm/proto/product_inventory"
|
"aps_crm/router"
|
"fmt"
|
"google.golang.org/grpc"
|
"net"
|
"net/http"
|
"os"
|
"os/signal"
|
"syscall"
|
"time"
|
)
|
|
func main() {
|
logx.Init(conf.Conf.Log)
|
defer logx.Sync()
|
|
//cont := service.NewContainer(service.Type_Container_Docker)
|
//err := cont.Init("123456")
|
//if err != nil {
|
// logx.Errorf("NewContainer Init err:%v", err)
|
// return
|
//}
|
|
if err := model.Init(); err != nil {
|
logx.Errorf("model Init err:%v", err)
|
return
|
}
|
|
if err := initialize.Init(); err != nil {
|
logx.Errorf("initialize Init err:%v", err)
|
return
|
}
|
|
go shutdown()
|
logx.Infof("aps-crm start serve...")
|
server := &http.Server{
|
Addr: fmt.Sprintf(":%d", conf.Conf.System.Port),
|
Handler: router.InitRouter(),
|
ReadTimeout: 5 * time.Second,
|
WriteTimeout: 5 * time.Second,
|
}
|
//启动grpc客户端
|
go middleware.InitUserConn()
|
go grpc_init.InitProductInventoryServiceConn()
|
go grpc_init.InitCrmApsGrpcServiceConn()
|
//启动grpc服务
|
go func() {
|
ln, err := net.Listen("tcp", ":"+conf.Conf.System.GrpcPort)
|
if err != nil {
|
logx.Errorf("grpc server init error: %v", err.Error())
|
panic(fmt.Sprintf("grpc server init error: %v", err.Error()))
|
}
|
s := grpc.NewServer()
|
//todo 添加具体服务
|
product_inventory.RegisterProductInventoryServiceServer(s, &product_inventory.Server{})
|
crm_aps.RegisterCrmAndApsGrpcServiceServer(s, &crm_aps.Server{})
|
client.RegisterClientServiceServer(s, &client.Server{})
|
err = s.Serve(ln)
|
if err != nil {
|
logx.Errorf("grpc server init error: %v", err.Error())
|
panic(fmt.Sprintf("grpc server init error: %v", err.Error()))
|
}
|
}()
|
|
middleware.InitRefreshUserManager(5, 5, 3600)
|
middleware.RunRefreshUser() ///定时对活跃用户更新用户详情
|
|
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
|
|
middleware.StopRefreshUser()
|
grpc_init.CloseProductInventoryServiceConn()
|
middleware.CloseUserConn()
|
grpc_init.CloseCrmApsGrpcServiceConn()
|
|
logx.Infof("aps-crm exited...")
|
os.Exit(0)
|
}
|