golang快速构建企业级Gin和gRPC微服务插件库rk-boot的使用

Golang快速构建企业级Gin和gRPC微服务插件库rk-boot的使用

概念

rk-boot是一个可以通过YAML管理后端服务依赖的库。随着项目规模扩大,标准化、统一化和简化微服务架构成为巨大挑战。使用rk-boot构建微服务,让团队接手整洁有序的代码。

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
}
检查Swagger UI

Swagger UI: http://localhost:8080/sw

Swagger UI

支持的插件

rk-boot支持多种插件,包括各种Web框架、数据库、监控工具等。

开发状态: 稳定

构建指令

只需运行make all来验证您的更改。或者运行example/文件夹中的代码。

测试指令

运行单元测试使用make test命令。

github工作流会自动运行单元测试和golangci-lint进行测试和lint验证。

贡献

我们鼓励并支持一个活跃、健康的贡献者社区——包括您!详情见贡献指南和行为准则。

许可证

遵循开源标准,本项目发布并分发在Apache 2.0许可证下。

加入讨论频道

频道 二维码/链接
微信(中文) 微信
Slack(英文) #rk-boot

Star历史

Star历史图表


更多关于golang快速构建企业级Gin和gRPC微服务插件库rk-boot的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于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服务示例:

  1. 首先定义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;
}
  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提供了以下优势:

  1. 快速启动Gin和gRPC服务
  2. 内置企业级功能:日志、监控、链路追踪等
  3. 统一的配置管理
  4. 丰富的中间件支持
  5. 开箱即用的健康检查和指标收集

通过使用rk-boot,开发者可以专注于业务逻辑的实现,而不必花费大量时间在基础设施的搭建上,大大提高了开发效率。

回到顶部