网关实现自定义接口安全检查与边缘节点连接权限验证
This commit is contained in:
@@ -2,15 +2,18 @@ package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"proxy-server/pkg/utils"
|
||||
"proxy-server/server/app"
|
||||
"proxy-server/server/core"
|
||||
"proxy-server/server/debug"
|
||||
"proxy-server/server/env"
|
||||
"proxy-server/server/fwd"
|
||||
"proxy-server/server/pkg/env"
|
||||
"proxy-server/server/pkg/log"
|
||||
"proxy-server/server/pkg/orm"
|
||||
g "proxy-server/server/globals"
|
||||
"proxy-server/server/log"
|
||||
"proxy-server/server/report"
|
||||
"proxy-server/server/web"
|
||||
"sync"
|
||||
@@ -24,14 +27,7 @@ import (
|
||||
_ "net/http/pprof"
|
||||
)
|
||||
|
||||
const (
|
||||
Version = 1
|
||||
RestoreMagic = 0x72
|
||||
)
|
||||
|
||||
type server struct {
|
||||
id int32
|
||||
name string
|
||||
}
|
||||
|
||||
func New() *server {
|
||||
@@ -94,22 +90,15 @@ func (s *server) Run() (err error) {
|
||||
|
||||
// 报告上线
|
||||
slog.Debug("报告服务上线")
|
||||
var reportErrCh = make(chan error, 1)
|
||||
defer close(reportErrCh)
|
||||
go func() {
|
||||
id, err := report.Online(ctx, s.name)
|
||||
if err != nil {
|
||||
reportErrCh <- err
|
||||
return
|
||||
}
|
||||
s.id = id
|
||||
}()
|
||||
err = report.Online(app.Name)
|
||||
if err != nil {
|
||||
return fmt.Errorf("服务上线失败: %w", err)
|
||||
}
|
||||
|
||||
// 等待退出信号
|
||||
osQuit := make(chan os.Signal, 1)
|
||||
signal.Notify(osQuit, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
var reportErr error
|
||||
select {
|
||||
case <-osQuit:
|
||||
slog.Info("服务主动退出")
|
||||
@@ -117,26 +106,23 @@ func (s *server) Run() (err error) {
|
||||
slog.Warn("fwd 服务异常退出", "err", err)
|
||||
case err := <-apiQuit:
|
||||
slog.Warn("web 服务异常退出", "err", err)
|
||||
case reportErr = <-reportErrCh:
|
||||
slog.Warn("报告服务上线发生错误", "err", reportErr)
|
||||
}
|
||||
cancel()
|
||||
|
||||
// 报告下线
|
||||
if reportErr == nil {
|
||||
slog.Debug("报告服务下线")
|
||||
go func() {
|
||||
err := report.Offline(ctx, s.name)
|
||||
if err != nil {
|
||||
slog.Error("报告服务下线发生错误", "err", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// 等待其它服务关闭
|
||||
timeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
|
||||
// 报告下线
|
||||
slog.Debug("报告服务下线")
|
||||
err = report.Offline(app.Name)
|
||||
if err != nil {
|
||||
slog.Error("服务下线失败", "err", err)
|
||||
}
|
||||
|
||||
// 关闭 redis
|
||||
g.ExitRedis()
|
||||
|
||||
// 等待其它服务关闭
|
||||
select {
|
||||
case <-utils.ChanWgWait(timeout, &wg):
|
||||
slog.Info("服务正常关闭")
|
||||
@@ -156,7 +142,7 @@ func (s *server) init() error {
|
||||
|
||||
log.Init()
|
||||
env.Init()
|
||||
orm.Init()
|
||||
g.InitRedis()
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -169,31 +155,29 @@ func (s *server) restore() error {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(bytes) == 17 && bytes[0] == RestoreMagic {
|
||||
s.name = uuid.UUID(bytes[1:]).String()
|
||||
slog.Info("恢复服务名称", "name", s.name)
|
||||
if len(bytes) == 17 && bytes[0] == core.RestoreMagic {
|
||||
app.Name = uuid.UUID(bytes[1:]).String()
|
||||
slog.Info("恢复服务名称", "name", app.Name)
|
||||
} else {
|
||||
var u = uuid.New()
|
||||
s.name = u.String()
|
||||
app.Name = u.String()
|
||||
|
||||
bytes = make([]byte, 17)
|
||||
bytes[0] = RestoreMagic
|
||||
bytes[0] = core.RestoreMagic
|
||||
copy(bytes[1:], u[:])
|
||||
err := os.WriteFile(file, bytes, 0644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
slog.Info("生成服务名称", "name", s.name)
|
||||
slog.Info("生成服务名称", "name", app.Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *server) startFwd(ctx context.Context) error {
|
||||
server := fwd.New(&fwd.Config{
|
||||
Id: &s.id,
|
||||
})
|
||||
server := fwd.New()
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
server.Stop()
|
||||
|
||||
Reference in New Issue
Block a user