golang快速构建企业级Gin和gRPC微服务插件库rk-boot的使用
Golang快速构建企业级Gin和gRPC微服务插件库rk-boot的使用
概念
rk-boot是一个可以通过YAML管理后端服务依赖的库。随着项目规模扩大,标准化、统一化和简化微服务架构成为巨大挑战。使用rk-boot构建微服务,让团队接手整洁有序的代码。
快速开始
我们将使用rk-boot启动一个gin-gonic/gin服务器。
安装
go get github.com/rookie-ninja/rk-boot/v2
go get github.com/rookie-ninja/rk-gin/v2
代码
boot.yaml
---
gin:
- name: greeter # 必填
port: 8080 # 必填
enabled: true # 必填
sw:
enabled: true # 可选,默认: false
main.go
// Copyright (c) 2021 rookie-ninja
//
// Use of this source code is governed by an Apache-style
// license that can be found in the LICENSE file.
package main
import (
"context"
"fmt"
"github.com/gin-gonic/gin"
"github.com/rookie-ninja/rk-boot/v2"
"github.com/rookie-ninja/rk-gin/v2/boot"
"net/http"
)
// @title Swagger Example API
// @version 1.0
// @description This is a sample rk-demo server.
// @termsOfService http://swagger.io/terms/
// @securityDefinitions.basic BasicAuth
// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
func main() {
// 创建新的boot实例
boot := rkboot.NewBoot()
// 注册处理器
entry := rkgin.GetGinEntry("greeter")
entry.Router.GET("/v1/greeter", Greeter)
// 启动
boot.Bootstrap(context.TODO())
boot.WaitForShutdownSig(context.TODO())
}
// Greeter处理器
// @Summary Greeter
// @Id 1
// @Tags Hello
// @version 1.0
// @Param name query string true "name"
// @produce application/json
// @Success 200 {object} GreeterResponse
// @Router /v1/greeter [get]
func Greeter(ctx *gin.Context) {
ctx.JSON(http.StatusOK, &GreeterResponse{
Message: fmt.Sprintf("Hello %s!", ctx.Query("name")),
})
}
type GreeterResponse struct {
Message string
}
验证
检查API
$ go run main.go
$ curl -X GET localhost:8080/v1/greeter?name=rk-dev
{"Message":"Hello rk-dev!"}
$ curl -X GET localhost:8080/rk/v1/ready
{
"ready": true
}
$ curl -X GET localhost:8080/rk/v1/alive
{
"alive": true
}
支持的插件
rk-boot支持多种插件,包括各种Web框架、数据库、监控工具等。
开发状态: 稳定
构建指令
只需运行make all来验证您的更改。或者运行example/文件夹中的代码。
测试指令
运行单元测试使用make test命令。
github工作流会自动运行单元测试和golangci-lint进行测试和lint验证。
贡献
我们鼓励并支持一个活跃、健康的贡献者社区——包括您!详情见贡献指南和行为准则。
许可证
遵循开源标准,本项目发布并分发在Apache 2.0许可证下。
加入讨论频道
频道 | 二维码/链接 |
---|---|
微信(中文) | ![]() |
Slack(英文) | #rk-boot |
Star历史
更多关于golang快速构建企业级Gin和gRPC微服务插件库rk-boot的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang快速构建企业级Gin和gRPC微服务插件库rk-boot的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用rk-boot快速构建企业级Gin和gRPC微服务
rk-boot是一个基于Gin和gRPC的企业级微服务快速开发框架,它提供了许多开箱即用的功能,如配置管理、日志、监控、链路追踪等,可以显著提高开发效率。
安装rk-boot
首先安装rk-boot库:
go get -u github.com/rookie-ninja/rk-boot
快速启动Gin服务
以下是一个最简单的Gin服务示例:
package main
import (
"context"
"github.com/rookie-ninja/rk-boot"
"github.com/rookie-ninja/rk-gin/boot"
)
func main() {
// 创建启动器
boot := rkboot.NewBoot()
// 注册Gin服务
ginEntry := rkgin.GetGinEntry("gin-service")
ginEntry.Router.GET("/v1/greeting", func(ctx *gin.Context) {
ctx.JSON(200, gin.H{
"message": "Hello World!",
})
})
// 启动服务
boot.Bootstrap(context.Background())
// 等待关闭信号
boot.WaitForShutdownSig(context.Background())
}
快速启动gRPC服务
以下是一个简单的gRPC服务示例:
- 首先定义proto文件
greeter.proto
:
syntax = "proto3";
package api.v1;
option go_package = "api/v1;greeter";
service Greeter {
rpc Hello (HelloRequest) returns (HelloResponse) {}
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
- 实现gRPC服务:
package main
import (
"context"
"github.com/rookie-ninja/rk-boot"
"github.com/rookie-ninja/rk-grpc/boot"
"google.golang.org/grpc"
)
func main() {
// 创建启动器
boot := rkboot.NewBoot()
// 注册gRPC服务
grpcEntry := rkgrpc.GetGrpcEntry("grpc-service")
grpcEntry.AddRegFuncGrpc(registerGreeter)
// 启动服务
boot.Bootstrap(context.Background())
// 等待关闭信号
boot.WaitForShutdownSig(context.Background())
}
func registerGreeter(server *grpc.Server) {
api.RegisterGreeterServer(server, &greeterServer{})
}
type greeterServer struct {
api.UnimplementedGreeterServer
}
func (s *greeterServer) Hello(ctx context.Context, req *api.HelloRequest) (*api.HelloResponse, error) {
return &api.HelloResponse{
Message: "Hello " + req.Name,
}, nil
}
常用功能配置
1. 配置文件
rk-boot使用boot.yaml
进行配置:
gin:
- name: gin-service # 服务名称
port: 8080 # 端口
enabled: true # 是否启用
commonService:
enabled: true # 启用通用接口
2. 日志配置
logger:
zap:
- name: my-logger # 日志名称
level: info # 日志级别
encoding: console # 输出格式
outputPaths: ["logs"] # 输出路径
3. 监控和健康检查
rk-boot自动提供了Prometheus指标和健康检查端点:
/rk/v1/healthy
: 健康检查/metrics
: Prometheus指标
4. 中间件
rk-boot内置了许多有用的中间件:
ginEntry.Router.Use(rkginauth.AuthMiddleware())
ginEntry.Router.Use(rkginprom.PromMiddleware())
ginEntry.Router.Use(rkgintrace.TraceMiddleware())
完整示例
以下是一个结合了Gin和gRPC的完整示例:
package main
import (
"context"
"github.com/gin-gonic/gin"
"github.com/rookie-ninja/rk-boot"
"github.com/rookie-ninja/rk-gin/boot"
"github.com/rookie-ninja/rk-grpc/boot"
"google.golang.org/grpc"
)
func main() {
// 创建启动器
boot := rkboot.NewBoot()
// 注册Gin服务
ginEntry := rkgin.GetGinEntry("gin-service")
ginEntry.Router.GET("/v1/greeting", func(ctx *gin.Context) {
ctx.JSON(200, gin.H{
"message": "Hello from Gin!",
})
})
// 注册gRPC服务
grpcEntry := rkgrpc.GetGrpcEntry("grpc-service")
grpcEntry.AddRegFuncGrpc(registerGreeter)
// 启动服务
boot.Bootstrap(context.Background())
// 等待关闭信号
boot.WaitForShutdownSig(context.Background())
}
func registerGreeter(server *grpc.Server) {
api.RegisterGreeterServer(server, &greeterServer{})
}
type greeterServer struct {
api.UnimplementedGreeterServer
}
func (s *greeterServer) Hello(ctx context.Context, req *api.HelloRequest) (*api.HelloResponse, error) {
return &api.HelloResponse{
Message: "Hello " + req.Name + " from gRPC!",
}, nil
}
总结
rk-boot提供了以下优势:
- 快速启动Gin和gRPC服务
- 内置企业级功能:日志、监控、链路追踪等
- 统一的配置管理
- 丰富的中间件支持
- 开箱即用的健康检查和指标收集
通过使用rk-boot,开发者可以专注于业务逻辑的实现,而不必花费大量时间在基础设施的搭建上,大大提高了开发效率。