相关概念
在使用micro框架前必须熟悉下面的概念,本blog认为读者已经有此基础,故不再赘述。
- Protocol Buffers
- RPC和gRPC
- 计算机集成与分布式
- 负载均衡及服务注册与发现
- 网络通信(HTTP,UDP,常用端口【如:dns端口是53】)
开发环境中使用的程序与go包
- protoc(可执行程序)
- protoc-gen-go(可执行程序)
- protoc-gen-micro(可执行程序)
- micro(可执行程序)
- go-micro(go包,微服务框架,编写新服务时使用)
- micro下的example(样例程序,对于学习有用)
go版本说明
该blog的go版本使用的是当前最新的(go1.13.3 windows/amd64),该版本已提供了新的module功能,module用来管理不同版本之间的引用关系,在使用go get命令时应该使用该module功能(命令前加“GO111MODULE=on ”),在出现版本不一致问题时(如下图所示),可以通过该功能解决。
该功能也可通过环境变量开启,如下图所示
在对外提供功能包时应该有相应的mod文件,该文件用来记录所依赖其他包的版本信息,
protoc
该程序负责对proto文件进行解析,然后做相应的处理(语法解析等)
下载地址:https://github.com/protocolbuffers/protobuf/releases
将下载的压缩文件解压到指定的路径下(如c:)
配置环境变量
验证安装
protoc-gen-go
该程序用来将proto文件翻译成go可以使用的源码文件(基于protoc程序)
安装过程:在git命令行中输入go get -v github.com/golang/protobuf/protoc-gen-go
安装成功的标志是在go的工作目录下bin文件夹中生成一个protoc-gen-go.exe程序【Windows下】
protoc-gen-micro
该程序用来将proto文件对应的go文件与micro进行结合(服务注册等)
安装过程:在git命令行中输入go get -v github.com/micro/protoc-gen-micro
安装成功的标志是在go的工作目录下bin文件夹中生成一个protoc-gen-micro.exe程序【Windows下】
go-micro
该包是用户开发服务时使用的基础框架,它不是一个可执行程序,只作为引用的源文件;该步骤可以省略,因为在安装micro时会自动下载该部分代码,它作为micro的核心代码块。
下载过程:在git命令行中输入go get -v github.com/micro/go-micro
当出现如下问题时,
执行GO111MODULE=on go get -v github.com/micro/go-micro命令,如下图所示
这个问题是由本地缓存文件引起的,此时清除缓存并重新下载即可(go clean -modcache && go get -v github.com/micro/go-micro),如下图所示
此时,相关下载已经完成。
micro
用户开发程序的运行需要micro提供的基础功能,如api网管、代理等,即微服务运行时该程序必须处于运行中。
安装过程:在git命令行中输入go get -v github.com/micro/micro
安装过程中如果出现错误,请参阅go-micro的下载,出现错误及相关解决方案都一样
安装成功的标志是在go的工作目录下bin文件夹中生成一个micro.exe程序【Windows下】
examples
下载过程:在git命令行中输入go get -v github.com/micro/examples
结果展示如下
环境说明
总共需要22可执行程序(go的基础功能程序除外),go的工作目录包含21个,protoc程序放在用户指定目录,他们都需要添加到path环境变量中
样例程序的运行
本blog以examples下的greeter为例
1、运行服务
在greeter中通过bash运行srv服务
2、运行客户端
在greeter中通过bash运行cli服务
其他更多功能参考:https://github.com/micro/examples/tree/master/greeter
如下图所示
个人经验
1、功能包中应该有相应的mod文件,该文件用来记录所依赖其他包的版本信息,由mod文件可以生产sum文件,sum文件用来记录中间生产文件(存放在pkg中)的关联关系
2、在下载源码时,如果出现mod文件对应错误,此时基本上都是由缓存引起的,解决方案为:清除缓存重新下载,如下图所示
安装过程中使用到的go命令
go get -v github.com/golang/protobuf/protoc-gen-go
go get -v github.com/micro/protoc-gen-micro
go get -v github.com/micro/go-micro
go clean -modcache && go get -v github.com/micro/go-micro
go get -v github.com/micro/micro
go get -v github.com/micro/examples