134 lines
3.1 KiB
Go
134 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"net"
|
|
"os"
|
|
"strconv"
|
|
|
|
"product/internal/config"
|
|
"product/internal/server"
|
|
"product/internal/svc"
|
|
"product/product"
|
|
|
|
"pkg.local/discovery"
|
|
"pkg.local/log"
|
|
"pkg.local/modelbase"
|
|
"pkg.local/mysql"
|
|
"pkg.local/redis"
|
|
"pkg.local/validate"
|
|
|
|
"github.com/zeromicro/go-zero/core/conf"
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
"github.com/zeromicro/go-zero/core/service"
|
|
"github.com/zeromicro/go-zero/zrpc"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/reflection"
|
|
)
|
|
|
|
var configFile = flag.String("f", "etc/product.yaml", "the config file")
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
var c config.Config
|
|
conf.MustLoad(*configFile, &c)
|
|
|
|
if err := log.Init(log.Config{
|
|
Path: c.AppLog.Path,
|
|
InfoFile: c.AppLog.InfoFile,
|
|
ErrorFile: c.AppLog.ErrorFile,
|
|
FatalFile: c.AppLog.FatalFile,
|
|
MaxSize: c.AppLog.MaxSize,
|
|
MaxBackups: c.AppLog.MaxBackups,
|
|
MaxAge: c.AppLog.MaxAge,
|
|
}); err != nil {
|
|
fmt.Fprintf(os.Stderr, "log init: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := discovery.Init(discovery.Config{
|
|
Hosts: c.Nacos.Hosts,
|
|
NamespaceId: c.Nacos.NamespaceId,
|
|
Group: c.Nacos.Group,
|
|
}); err != nil {
|
|
log.Fatalf("nacos init: %v", err)
|
|
}
|
|
|
|
registerIP := c.Nacos.RegisterIP
|
|
port, err := listenPort(c.ListenOn)
|
|
if err != nil {
|
|
log.Fatalf("parse ListenOn: %v", err)
|
|
}
|
|
if err := discovery.Register(discovery.Instance{
|
|
ServiceName: c.Name,
|
|
IP: registerIP,
|
|
Port: port,
|
|
Group: c.Nacos.Group,
|
|
}); err != nil {
|
|
log.Fatalf("nacos register: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := discovery.Deregister(); err != nil {
|
|
log.Errorf("nacos deregister: %v", err)
|
|
}
|
|
}()
|
|
|
|
db, err := mysql.New(mysql.Config{
|
|
Host: c.Mysql.Host,
|
|
Port: c.Mysql.Port,
|
|
User: c.Mysql.User,
|
|
Password: c.Mysql.Password,
|
|
Database: c.Mysql.Database,
|
|
Charset: c.Mysql.Charset,
|
|
Prefix: c.Mysql.Prefix,
|
|
ReadHost: c.Mysql.ReadHost,
|
|
ReadPort: c.Mysql.ReadPort,
|
|
ReadUser: c.Mysql.ReadUser,
|
|
ReadPassword: c.Mysql.ReadPassword,
|
|
ReadDatabase: c.Mysql.ReadDatabase,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("mysql init: %v", err)
|
|
}
|
|
|
|
if err := redis.Init(redis.Config{
|
|
Host: c.BizRedis.Host,
|
|
Port: c.BizRedis.Port,
|
|
Password: c.BizRedis.Password,
|
|
DB: c.BizRedis.DB,
|
|
}); err != nil {
|
|
log.Fatalf("redis init: %v", err)
|
|
}
|
|
|
|
// modelbase uses Table(prefix+name); keep gorm TablePrefix for Model(&T{}) paths.
|
|
modelbase.Init(db, modelbase.Config{Prefix: c.Mysql.Prefix})
|
|
|
|
ctx := svc.NewServiceContext(c, db)
|
|
|
|
s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
|
|
product.RegisterProductServer(grpcServer, server.NewProductServer(ctx))
|
|
|
|
if c.Mode == service.DevMode || c.Mode == service.TestMode {
|
|
reflection.Register(grpcServer)
|
|
}
|
|
})
|
|
defer s.Stop()
|
|
|
|
logx.AddWriter(logx.NewWriter(os.Stdout))
|
|
|
|
s.AddUnaryInterceptors(validate.UnaryServerInterceptor(validate.MustNew()))
|
|
|
|
log.Infof("Starting rpc server at %s...", c.ListenOn)
|
|
s.Start()
|
|
}
|
|
|
|
func listenPort(listenOn string) (uint64, error) {
|
|
_, portStr, err := net.SplitHostPort(listenOn)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return strconv.ParseUint(portStr, 10, 64)
|
|
}
|