package main
|
|
import (
|
"context"
|
"fmt"
|
"google.golang.org/grpc"
|
"net"
|
"net/http"
|
"os"
|
"os/signal"
|
"syscall"
|
"time"
|
"wms/conf"
|
"wms/models"
|
"wms/pkg/logx"
|
"wms/proto/init_client"
|
"wms/proto/inventory_order"
|
"wms/proto/product_inventory"
|
"wms/proto/purchase_wms"
|
"wms/router"
|
"wms/service"
|
)
|
|
func main() {
|
// 读取配置
|
if err := conf.Init(); err != nil {
|
logx.Errorf("config init error! ", err.Error())
|
return
|
}
|
|
// 日志初始化
|
logx.Init(*conf.LogConf)
|
defer logx.Sync()
|
|
// 数据库初始化
|
if err := models.Init(); err != nil {
|
logx.Errorf("db init error! ", err.Error())
|
return
|
}
|
|
logx.Infof("aps-server start serve...")
|
server := &http.Server{
|
Addr: ":" + conf.WebConf.Port,
|
Handler: router.NewRouter(),
|
ReadTimeout: 5 * time.Second,
|
WriteTimeout: 5 * time.Second,
|
}
|
go shutdown(server)
|
//启动grpc客户端
|
//go controllers.InitInventoryOrderServiceConn()
|
//go controllers.InitProductInventoryServiceConn()
|
//go controllers.InitCodeServiceConn()
|
//go supplier.InitConn()
|
//go client.InitConn()
|
go init_client.InitClient()
|
//启动grpc服务
|
go func() {
|
ln, err := net.Listen("tcp", ":"+conf.WebConf.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{})
|
purchase_wms.RegisterPurchaseServiceServer(s, &purchase_wms.Server{})
|
inventory_order.RegisterInventoryOrderServiceServer(s, &inventory_order.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()))
|
}
|
}()
|
|
go service.InitLocationReportData()
|
go service.InitHistoryReportData()
|
|
logx.Error(server.ListenAndServe().Error())
|
}
|
|
func shutdown(server *http.Server) {
|
quit := make(chan os.Signal, 1)
|
signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM)
|
<-quit
|
|
logx.Infof("server exiting...")
|
// 创建一个上下文,设置超时时间
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
defer cancel()
|
|
//controllers.CloseInventoryOrderServiceConn()
|
//controllers.CloseProductInventoryServiceConn()
|
//controllers.CloseCodeServiceConn()
|
//supplier.CloseConn()
|
//client.CloseConn()
|
init_client.CloseClient()
|
// 关闭HTTP服务器
|
if err := server.Shutdown(ctx); err != nil {
|
logx.Infof("服务优雅退出失败: %v", err)
|
return
|
}
|
logx.Infof("server exited")
|
}
|