微服务笔记:go-kit(1)自动生成代码模板 + RESTfull接口文档

1、go-kit(微服务工具包集合)

go-kit本身不是一个框架,而是一套微服务工具包集合。用来解决分布式系统中的大多数常见问题,开发者只需要关注业务逻辑即可

安装:go get github.com/go-kit/kit

1、三层架构

1.1、Service

存放业务类,接口相关信息

1.2、Endpoint

定义RequestResponse格式,并可以使用装饰器包装函数,依次来实现各个中间件的嵌套。比如在请求的时候添加日志

1.3、Transport

主要负责与HttpGrpcThrift相关的逻辑

2、微服务架构设计关注点

  • Rate Limiter 限流器
  • Transport 数据传输(序列化和反序列化)
  • Logging 日志
  • Metrics指标
  • Circuit Breaker断路器
  • Request Traceing 请求追踪
  • Service Discover 服务发现

Go-kit 当前集成的组件

功能 组件
Circuit Breaker 断路器 hystrix-go、gobreaker、handy、breaker
Metrics指标 prometheus、dogstatsd、influx、graphite
服务发现 consul、dnssrv、etcd、eureka、lb、zoopkeeper
Request Tracing Opentracing、LightStep、AppDash、Zipkin
限流 uber-go/ratelimit

3、工程目录结构

image.png

2、工具

1、生成模板代码工具:truss

truss是一款go-kit代码生成工具,可以快速编写go-kit中的繁杂代码,并生成支持httpgrpc两种调用方式的服务

1、安装方式一

1.1、关闭gomod

export GO111MODULE=off
复制代码

1.2、下载源码到gopath的src目录下

go get -u -d github.com/metaverse/truss
复制代码

1.3、进入项目目录

cd $GOPATH/src/github.com/metaverse/truss
复制代码

1.4、开启gomod

export GO111MODULE=on
复制代码

1.5、下载依赖

make dependencies
复制代码

1.6、构建(若提示running “go-bindata”: exec: “go-bindata”: executable file not found in PATH,请将PATH,请将GOPATH/bin配置到环境变量)

make
复制代码

2、使用

2.1、创建并使用mod初始化项目
mkdir micorProject 
cd microProject
go mod init microProject
复制代码
2.2、编写proto文件,使用truss生成模板文件
truss *.proto
复制代码
2.3、模板目录结构

image.png

2.4、安装异常

找到源码中的main.go文件,新建工程编译(go build)生成可执行文件truss。然后执行***.proto**文件,生成模板文件。
例如命令/Volumes/HIKVISION/golang/Project/truss/truss *.proto

// 注释掉版本检测的代码
func init() {
	// If Version or VersionDate are not set, truss was not built with make
	//if version == "" || date == "" {
	//	rebuild := promptNoMake()
	//	if !rebuild {
	//		os.Exit(1)
	//	}
	//	err := makeAndRunTruss(os.Args)
	//	if err != nil {
	//		log.Fatal(errors.Wrap(err, "please install truss with make manually"))
	//	}
	//	os.Exit(0)
	//}

	var buildinfo string
	buildinfo = fmt.Sprintf("version: %s", version)
	buildinfo = fmt.Sprintf("%s version date: %s", buildinfo, date)

	flag.Usage = func() {
		if buildinfo != "" && (*verboseFlag || *helpFlag) {
			fmt.Fprintf(os.Stderr, "%s (%s)\n", binName, strings.TrimSpace(buildinfo))
		}
		fmt.Fprintf(os.Stderr, "\nUsage: %s [options] <protofile>...\n", binName)
		fmt.Fprintf(os.Stderr, "\nGenerates go-kit services using proto3 and gRPC definitions.\n")
		fmt.Fprintln(os.Stderr, "\nOptions:")
		flag.PrintDefaults()
	}
}
复制代码

2、生成RESTfull接口文档工具:Swaggergrpc-gateway

swagger是目前最受欢迎的RESTfull API文档生成工具之一,支持从设计和文档到测试和部署的整个API声明周期。
主要优点如下:

  • grpc-gateway也支持Swagger
  • 跨平台、跨语言的支持
  • 强大的社区
  • 生态圈 Swagger ToolsSwagger EditorSwagger CodegenSwagger UI…)
  • 强大的控制台

1、安装插件 protoc-gen-goprotoc-gen-grpc-gatewayprotoc-gen-swagger

go get -u github.com/golang/protobuf/protoc-gen-go
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
复制代码

2、编写并编译proto文件,生成echo.swagger.json文件

protoc -I . -I ./google/api --swagger_out=logtostderr=true:. ./*.proto
复制代码

3、通过Docker启动Swagger

1)下载swagger-editor的容器

sudo docker pull swaggerapi/swagger-editor 
复制代码

2)下载swagger-ui的容器

sudo docker pull swaggerapi/swagger-ui 
复制代码

3)启动swagger-ui

docker run -p 80:8080 -e SWAGGER_JSON=/foo/echo.swagger.json -v /Volumes/HIKVISION/golang/Project/go-kit-mircor-server/proto:/foo swaggerapi/swagger-ui
复制代码

-e:执行容器中/foo/swagger.json
-v:将/Volumes/HIKVISION/golang/Project/go-kit-mircor-server/proto中的echo.swagger.json挂在到 /foo中执行

image.png

4、也可以url方式加载

启动nginx静态web服务

配置Nginx支持跨域请求,设置Access-Control-Allow-Origin*

location / {  
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

    if ($request_method = 'OPTIONS') {
        return 204;
    }
} 
复制代码

静态Swagger配置文件路径:http://localhost:9522/echo.swagger.json

image.png

Swagger Web 控制台: http://localhost/#/

image.png

参考:其他开源微服务库

kratos

go-zero

博客

再见go-micro!企业项目迁移go-zero全攻略(一)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享