微服务笔记:go

您所在的位置:网站首页 grpc接口文档生成工具 微服务笔记:go

微服务笔记:go

2023-09-18 12:01| 来源: 网络整理| 查看: 265

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

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

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

1、三层架构 1.1、Service

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

1.2、Endpoint

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

1.3、Transport

主要负责与Http、Grpc、Thrift相关的逻辑

2、微服务架构设计关注点 Rate Limiter 限流器 Transport 数据传输(序列化和反序列化) Logging 日志 Metrics指标 Circuit Breaker断路器 Request Traceing 请求追踪 Service Discover 服务发现 Go-kit 当前集成的组件 功能组件Circuit Breaker 断路器hystrix-go、gobreaker、handy、breakerMetrics指标prometheus、dogstatsd、influx、graphite服务发现consul、dnssrv、etcd、eureka、lb、zoopkeeperRequest TracingOpentracing、LightStep、AppDash、Zipkin限流uber-go/ratelimit、 3、工程目录结构

image.png

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

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

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,请将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] ...\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接口文档工具:Swagger、grpc-gateway

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

grpc-gateway也支持Swagger 跨平台、跨语言的支持 强大的社区 生态圈 Swagger Tools (Swagger Editor、Swagger Codegen、Swagger UI...) 强大的控制台 1、安装插件 protoc-gen-go、protoc-gen-grpc-gateway、protoc-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全攻略(一)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3