littlebot
Published on 2025-04-03 / 4 Visits
0

【源码】基于Go Gin框架的微服务开发框架

项目简介

ggs(Go Gin Service)是专门为微服务架构设计的开发框架,其目标是让业务开发人员能专注于业务逻辑实现,同时自动具备服务治理能力,以此提升开发效率。该框架封装了程序启动、退出、部署等细节,集成服务治理各环节,并实现与公司内部组件的无缝对接,最大程度降低服务治理的开发成本。

项目的主要特性和功能

  1. Gin无缝集成:HTTP使用习惯与Gin完全一致。
  2. 多协议多端口:支持HTTP和gRPC,可同时监听多个端口。
  3. 服务注册与发现:集成公司Consul,自动实现服务注册和发现。
  4. 配置中心:集成公司配置中心,一键生成框架定制模板,支持热更新。
  5. 限流:自动具备限流能力,使用方配置参数即可,支持Provider和Consumer。
  6. 调用链追踪:集成公司Trace,自动具备链路追踪能力。
  7. Metrics:自动生成Metrics数据,并与Prometheus自动对接。
  8. 负载均衡:作为Consumer调用远端时,支持多种负载均衡策略和重试,按需配置。
  9. 隔离容错:通过超时、熔断策略保护分布式系统,避免错误雪崩,按需配置。
  10. Sidecar:接入Sidecar时指定参数即可。
  11. Log库:提供开箱即用的Log库,支持stdout/file输出、自动切割、JSON格式、添加结构化字段等。
  12. Redis/MySQL:封装开箱即用的Redis/MySQL库,支持Trace。
  13. 部署:与PIEE的新CI&CD结合,简单配置可实现部署,无缝支持Kubernetes部署。
  14. 优雅处理:支持优雅退出和平滑重启,避免发布时流量丢失或报错,解决并行发布时的负载均衡问题。

安装使用步骤

1. 快速搭建

1.0 使用ggs框架的最短路径

  1. 安装ggs - gen工具: bash
  2. 生成新应用: bash ggs - gen new myapp

1.1 快速搭建HTTP服务

  1. 参考代码: go package main import ( "net/http" ) func main() { if err := ggs.Init(); err != nil { panic(err) } r, err := ggs.Gin() if err != nil { panic(err) } r.GET("/ping", func(c *gin.Context) { c.String(http.StatusOK, "pong") }) ggs.Run() }
  2. 配置文件./conf/app.yamlyaml service: name: RestServer environment: dev ggs: protocols: rest: listenAddress: "0.0.0.0:8868"

1.2 快速搭建gRPC服务

  1. 定义proto文件。
  2. 使用protoc - gen - ggs插件生成*.pb.go文件。
  3. 参考代码: go package main import ( pb "your/proto/package" "context" ) type Service struct{} func (s *Service) SayHello(ctx context.Context, in *pb.HelloReq) (*pb.HelloResp, error) { return &pb.HelloResp{ Message: "Hello " + in.Name,}, nil } func main() { if err := ggs.Init(); err != nil { panic(err) } pb.RegisterGreeterServer(&Service{}) ggs.Run() }
  4. 配置文件./conf/app.yamlyaml service: name: GrpcServer environment: dev ggs.protocols: grpc: listenAddress: "0.0.0.0:9000" rest: listenAddress: "0.0.0.0:9001"

2. 服务治理

2.1 服务注册与发现

conf/advanced.yaml中配置: yaml ggs.service: registry: disabled: false address: http://10.0.1.101:8500

2.2 调用链追踪

conf/advanced.yaml中配置: yaml ggs.tracing: disabled: false settings: samplingRate: 1.0 traceFileName: /data/logs/trace/trace.log

3. 公共服务调用

3.1 调用Redis

(文档未给出具体步骤)

3.2 调用MySQL

参考代码: go import ( ) db := store.GormWithTrace(c.Request.Context(), "local")

4. 部署

4.1 CI构建命令

  • Go mod模式(推荐): bash make artifacts_mod
  • 非Go mod模式: bash make artifacts

4.2 CD运行命令

  • ECS发布: bash sh run.sh reload
  • 容器发布: bash ./paas - project - id - c /data/etc/cc/paas_project_id

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】