Categorygithub.com/Houserqu/arpc
repositorypackage
1.2.1
Repository: https://github.com/houserqu/arpc.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author

# README

aRPC

基于 grpc 封装的针对 kubernetes 环境部署的微服务框架,充分利用 kubernetes 自带的功能来降低框架的复杂度。特点:轻量、简单和基于kubernetes。

TODO

  • 生成项目初始化模板
  • 日志链路追踪

开发

示例项目

(待完善)

创建服务

package main

import (
	ip "ip/gen/go/kit/ip"
	"ip/internal"

	"github.com/Houserqu/arpc"
)

func main() {
	// 创建服务
	svr := arpc.NewServer()

	// 注册 grpc 服务
	ip.RegisterIPServer(svr.GrpcServer.Server, &internal.IPServer{})

	// 注册 http 服务
	svr.HTTPServer.RegisterHandler(ip.RegisterIPHandlerFromEndpoint)

	// 启动服务
	svr.Start()
}

主要特性

gRPC

默认配置

grpc:
  addr: 0.0.0.0:8000

HTTP

内置基于 grpc-gateway 的 HTTP 协议代理,需要在 proto 文件中配置 http path 和 method

默认配置

http:
  addr: 0.0.0.0:8080

服务发现

默认使用 k8s 的 dns 服务发现,端口 8000 可以通过配置自定义服务的 IP 和 端口,一般于开发环境

// 创建客户端
ipClient, err := arpc.GetServerClient("ip", ip.NewIPClient)

自定义服务的地址

discovery:
  ip: localhost:8000

配置

使用 viper 库加载本地 config.yaml 文件,可以通过环境变量 CONFIG_PATH 指定配置文件路径 建议使用 K8S 的 ConfigMap 管理配置文件,注意,如果想实现配置热更新,不要使用 subpath 挂载配置(subpath 不支持配置变更立即更新容器中的文件)

参数校验

基于 protoc-gen-validate 实现了全局参数校验,需要在 proto 中配置参数规则

Mysql

内置 gorm 库作为 Mysql 客户端,最多支持创建 3 个 Mysql 客户端

使用方式

aprc.Mysql  # 客户端1
arpc.Mysql1 # 客户端1
arpc.Mysql2 # 客户端2
arpc.Mysql3 # 客户端3

配置示例

mysql: 
  host: localhost
  port: 3306
  database: test
  password: pass
  user: user
mysql2: 
  host: localhost
  port: 3306
  database: test2
  password: pass
  user: user
mysql2: 
  host: localhost
  port: 3306
  database: test3
  password: pass
  user: user

Redis

内置 Redis 客户端,支持连接多个 DB

使用方式

arpc.Redis[1] # 1 是 DB 号

配置示例

redis:
  addr: localhost:6379
  username: user
  password: pass
  dbs: 
   - 0
   - 1
   - 2

Buf

建议使用 buf 管理 proto 文件的操作

配置示例

buf.yaml

version: v2
modules:
  - path: proto/kit/ip
  - path: proto/app/user
lint:
  use:
    - STANDARD
  except:
    - PACKAGE_VERSION_SUFFIX
    - FIELD_LOWER_SNAKE_CASE
    - SERVICE_SUFFIX
breaking:
  use:
    - FILE
deps:
  - buf.build/googleapis/googleapis
  - buf.build/envoyproxy/protoc-gen-validate

buf.gen.yaml

version: v1
plugins:
  - plugin: go
    out: gen/go
  - plugin: go-grpc
    out: gen/go
  - name: grpc-gateway
    out: gen/go
    opt:
      - generate_unbound_methods=true
  - name: validate
    out: gen/go
    opt:
      - lang=go

Git SubModule

记录一些 git 子模块的操作

# 拉取主仓库后,如何拉取子模块仓库(需要存在 .gitmodules 文件)
git submodule init
git submodule update