feat(service): align with discover stateless architecture (by AI)
This commit is contained in:
parent
591da84018
commit
449d8b0ad9
@ -42,7 +42,7 @@ type ServiceConfig struct {
|
|||||||
SessionWithoutCookie bool // Session 禁用 Cookie
|
SessionWithoutCookie bool // Session 禁用 Cookie
|
||||||
DeviceWithoutCookie bool // 设备ID禁用 Cookie
|
DeviceWithoutCookie bool // 设备ID禁用 Cookie
|
||||||
IdServer string // Redis 服务器连接 (用于全局唯一 ID 生成)
|
IdServer string // Redis 服务器连接 (用于全局唯一 ID 生成)
|
||||||
DiscoverApp string // 强制指定 Discover 应用名称,如果不指定且 Listen 为空则自动获取并注册
|
DiscoverApp string // Discover 应用名称。优先从环境变量 DISCOVER_APP 获取,若为空则自动通过代码检测。
|
||||||
KeepKeyCase bool // 是否保持 Key 的首字母大小写
|
KeepKeyCase bool // 是否保持 Key 的首字母大小写
|
||||||
IndexFiles []string // 静态文件索引文件
|
IndexFiles []string // 静态文件索引文件
|
||||||
IndexDir bool // 访问目录时显示文件列表
|
IndexDir bool // 访问目录时显示文件列表
|
||||||
|
|||||||
8
proxy.go
8
proxy.go
@ -1,7 +1,6 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"apigo.cc/go/discover"
|
|
||||||
gohttp "apigo.cc/go/http"
|
gohttp "apigo.cc/go/http"
|
||||||
"apigo.cc/go/log"
|
"apigo.cc/go/log"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -117,7 +116,12 @@ func processProxy(request *Request, response *Response, logger *log.Logger) bool
|
|||||||
copyResponse(res, response, logger)
|
copyResponse(res, response, logger)
|
||||||
} else {
|
} else {
|
||||||
// Discover 代理
|
// 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
|
caller.NoBody = true
|
||||||
res, _ := caller.ManualDoWithNode(request.Method, app, "", path, request.Body)
|
res, _ := caller.ManualDoWithNode(request.Method, app, "", path, request.Body)
|
||||||
copyResponse(res, response, logger)
|
copyResponse(res, response, logger)
|
||||||
|
|||||||
30
server.go
30
server.go
@ -1,6 +1,7 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"apigo.cc/go/config"
|
||||||
"apigo.cc/go/discover"
|
"apigo.cc/go/discover"
|
||||||
"apigo.cc/go/log"
|
"apigo.cc/go/log"
|
||||||
"context"
|
"context"
|
||||||
@ -16,6 +17,9 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// GlobalDiscoverer 供服务框架内部使用的发现实例
|
||||||
|
var GlobalDiscoverer *discover.Discoverer
|
||||||
|
|
||||||
// AsyncServer 异步服务实例
|
// AsyncServer 异步服务实例
|
||||||
type AsyncServer struct {
|
type AsyncServer struct {
|
||||||
server *http.Server
|
server *http.Server
|
||||||
@ -24,6 +28,7 @@ type AsyncServer struct {
|
|||||||
stopChan chan os.Signal
|
stopChan chan os.Signal
|
||||||
startChan chan bool
|
startChan chan bool
|
||||||
useDiscover bool
|
useDiscover bool
|
||||||
|
discoverer *discover.Discoverer
|
||||||
}
|
}
|
||||||
|
|
||||||
// AsyncStart 异步启动服务
|
// AsyncStart 异步启动服务
|
||||||
@ -105,10 +110,23 @@ func (as *AsyncServer) start() {
|
|||||||
ip := GetServerIp()
|
ip := GetServerIp()
|
||||||
discoverAddr := fmt.Sprintf("%s:%s", ip, port)
|
discoverAddr := fmt.Sprintf("%s:%s", ip, port)
|
||||||
|
|
||||||
conf := discover.GetConfig()
|
// 从 discover.yml/json 加载基础结构,但不包含敏感的 SafeBuf
|
||||||
conf.App = appName
|
// 此处不再强行注入 discover.Config 的 Calls,而是留给具体业务手动注入,或者后续提供安全的反序列化机制
|
||||||
discover.SetConfig(conf)
|
var discConf discover.Config
|
||||||
if discover.Start(discoverAddr) {
|
_ = 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)
|
log.DefaultLogger.Info("discover registered", "app", appName, "addr", discoverAddr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,8 +145,8 @@ func (as *AsyncServer) start() {
|
|||||||
// Stop 停止服务
|
// Stop 停止服务
|
||||||
func (as *AsyncServer) Stop() {
|
func (as *AsyncServer) Stop() {
|
||||||
log.DefaultLogger.Info("service stopping")
|
log.DefaultLogger.Info("service stopping")
|
||||||
if as.useDiscover {
|
if as.discoverer != nil {
|
||||||
discover.Stop()
|
as.discoverer.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user