diff --git a/config.go b/config.go index 809ecc8..1b415a8 100644 --- a/config.go +++ b/config.go @@ -42,7 +42,7 @@ type ServiceConfig struct { SessionWithoutCookie bool // Session 禁用 Cookie DeviceWithoutCookie bool // 设备ID禁用 Cookie IdServer string // Redis 服务器连接 (用于全局唯一 ID 生成) - DiscoverApp string // 强制指定 Discover 应用名称,如果不指定且 Listen 为空则自动获取并注册 + DiscoverApp string // Discover 应用名称。优先从环境变量 DISCOVER_APP 获取,若为空则自动通过代码检测。 KeepKeyCase bool // 是否保持 Key 的首字母大小写 IndexFiles []string // 静态文件索引文件 IndexDir bool // 访问目录时显示文件列表 diff --git a/proxy.go b/proxy.go index 5ff70f2..82c4018 100644 --- a/proxy.go +++ b/proxy.go @@ -1,7 +1,6 @@ package service import ( - "apigo.cc/go/discover" gohttp "apigo.cc/go/http" "apigo.cc/go/log" "fmt" @@ -117,7 +116,12 @@ func processProxy(request *Request, response *Response, logger *log.Logger) bool copyResponse(res, response, logger) } else { // Discover 代理 - caller := discover.NewCaller(request.Request, logger) + if GlobalDiscoverer == nil { + logger.Error("proxy failed: GlobalDiscoverer is not initialized") + response.WriteHeader(http.StatusBadGateway) + return true + } + caller := GlobalDiscoverer.NewCaller(request.Request, logger) caller.NoBody = true res, _ := caller.ManualDoWithNode(request.Method, app, "", path, request.Body) copyResponse(res, response, logger) diff --git a/server.go b/server.go index 5de673a..74dc49f 100644 --- a/server.go +++ b/server.go @@ -1,6 +1,7 @@ package service import ( + "apigo.cc/go/config" "apigo.cc/go/discover" "apigo.cc/go/log" "context" @@ -16,6 +17,9 @@ import ( "time" ) +// GlobalDiscoverer 供服务框架内部使用的发现实例 +var GlobalDiscoverer *discover.Discoverer + // AsyncServer 异步服务实例 type AsyncServer struct { server *http.Server @@ -24,6 +28,7 @@ type AsyncServer struct { stopChan chan os.Signal startChan chan bool useDiscover bool + discoverer *discover.Discoverer } // AsyncStart 异步启动服务 @@ -105,10 +110,23 @@ func (as *AsyncServer) start() { ip := GetServerIp() discoverAddr := fmt.Sprintf("%s:%s", ip, port) - conf := discover.GetConfig() - conf.App = appName - discover.SetConfig(conf) - if discover.Start(discoverAddr) { + // 从 discover.yml/json 加载基础结构,但不包含敏感的 SafeBuf + // 此处不再强行注入 discover.Config 的 Calls,而是留给具体业务手动注入,或者后续提供安全的反序列化机制 + var discConf discover.Config + _ = config.Load(&discConf, "discover") + + // Logger 继承 + logger := log.DefaultLogger + + // 解析必需的 Registry,支持环境变量 fallback + registry := os.Getenv("DISCOVER_REGISTRY") + if registry == "" { + registry = "127.0.0.1:6379::15" // Default fallback + } + + as.discoverer = discover.Start(registry, appName, discoverAddr, logger, discConf) + GlobalDiscoverer = as.discoverer + if as.discoverer != nil { log.DefaultLogger.Info("discover registered", "app", appName, "addr", discoverAddr) } } @@ -127,8 +145,8 @@ func (as *AsyncServer) start() { // Stop 停止服务 func (as *AsyncServer) Stop() { log.DefaultLogger.Info("service stopping") - if as.useDiscover { - discover.Stop() + if as.discoverer != nil { + as.discoverer.Stop() } ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)