Files
apiServer-service/utils/server_cli/serverCli.go
T
shiran 6050d11f27 feat: 添加微服务模板基础架构
- 创建基于 CloudWego Hertz 的 Go 微服务脚手架
- 集成 Nacos 服务注册/发现功能
- 添加 gRPC 客户端支持
- 实现环境变量配置管理 (.env.example)
- 添加 HTTP 中间件 (Recovery, AccessLog, CORS)
- 配置 Gitea CI/CD 构建部署流程

BREAKING CHANGE: 项目结构调整,从简单的 API 服务升级为完整的微服务架构
2026-04-15 11:13:38 +08:00

89 lines
1.9 KiB
Go

package server_cli
import (
"apiServer_service/proto"
"apiServer_service/utils/logger"
"apiServer_service/utils/nacos"
"context"
"errors"
"os"
"strconv"
"sync"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/metadata"
)
var (
grpcConn *grpc.ClientConn
grpcClient proto.ServerVisitServiceClient
connMu sync.Mutex
)
func getApiServer() string {
service, err := nacos.DiscoverService("apiServer")
if err != nil {
logger.Error("获取服务器地址失败", err)
if service.Ip != "" {
return service.Ip + ":" + strconv.Itoa(int(service.Port))
}
return ""
}
return service.Ip + ":" + strconv.Itoa(int(service.Port))
}
func getGrpcClient() (proto.ServerVisitServiceClient, error) {
connMu.Lock()
defer connMu.Unlock()
if grpcClient != nil && grpcConn != nil {
return grpcClient, nil
}
serverUri := getApiServer()
if serverUri == "" {
return nil, errors.New("无法获取 apiServer 地址")
}
conn, err := grpc.NewClient(serverUri, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
logger.Error("gRPC 连接失败", err)
return nil, err
}
grpcConn = conn
grpcClient = proto.NewServerVisitServiceClient(conn)
return grpcClient, nil
}
func getContext() context.Context {
token := os.Getenv("GRPC_TOKEN")
md := metadata.Pairs("authorization", "Bearer "+token)
return metadata.NewOutgoingContext(context.Background(), md)
}
func ReportVisit(token, note, visitIP, osName string, point, userID int) error {
client, err := getGrpcClient()
if err != nil {
return err
}
record, err := client.AddServerVisitRecode(getContext(), &proto.ServerVisitRequest{})
if err != nil {
logger.Error("ReportVisit error", err)
return err
}
logger.Debug("ReportVisit", record)
return nil
}
func CloseGrpcConn() {
connMu.Lock()
defer connMu.Unlock()
if grpcConn != nil {
grpcConn.Close()
grpcConn = nil
grpcClient = nil
}
}