package main import ( "flag" "fmt" "log" "lone-services/bff/internal/config" "lone-services/bff/internal/dialer" "lone-services/bff/internal/request" "lone-services/bff/internal/response" "lone-services/bff/internal/wsClient" "lone-services/bff/internal/wsproxy" "lone-services/pkg/discovery" "lone-services/pkg/utils" "net/http" "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/gateway" "github.com/zeromicro/go-zero/rest" "github.com/zeromicro/go-zero/zrpc" ) var configFile = flag.String("f", "etc/bff.yaml", "the config file") func main() { flag.Parse() var c config.Config conf.MustLoad(*configFile, &c) // Nacos配置拉取初始化 nacosParam := utils.NacosConfig{ Hosts: c.Nacos.Hosts, NamespaceId: c.Nacos.NamespaceId, Group: c.Nacos.Group, ConfigID: c.Nacos.ConfigID, } utils.InitConfig(nacosParam) 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 if err := discovery.Register(discovery.Instance{ ServiceName: c.Name, IP: registerIP, Port: uint64(c.Port), Group: c.Nacos.Group, }); err != nil { log.Fatalf("nacos register: %v", err) } defer func() { if err := discovery.Deregister(); err != nil { log.Printf("nacos deregister: %v", err) } }() // Gateway 仅处理普通接口 /api /admin,端口 c.Port=10000 gw := gateway.MustNewServer(c.GatewayConf, gateway.WithDialer(dialer.Nacos), gateway.WithMiddleware(request.FormUploadMiddleware), gateway.WithMiddleware(request.UserReadMiddleware), gateway.WithMiddleware(response.Wrap), ) defer gw.Stop() rpcMgr := wsproxy.NewRpcClientManager(c.WsPercutaneousRpc, zrpc.WithUnaryClientInterceptor(request.UserClientInterceptor), zrpc.WithStreamClientInterceptor(request.UserStreamInterceptor), ) wsRest := rest.MustNewServer(rest.RestConf{ Host: c.Host, Port: c.WsPort, }) defer wsRest.Stop() // 注册ws路由到独立rest服务 wsRest.AddRoutes([]rest.Route{ { Method: http.MethodGet, Path: "/ws/percutaneous/add/user", Handler: wsClient.PercutaneousAddUser(rpcMgr), }, }) go func() { logx.Info("WS rest server start on :", c.WsPort) wsRest.Start() }() fmt.Printf("Gateway server at %s:%d\n", c.Host, c.Port) gw.Start() }