敞开掘金生长之旅!这是我参与「掘金日新方案 2 月更文应战」的第 1 天,点击检查活动详情
真的,没想到往常买东西碰上了假货,没想到敲代码用结构也用上假的了。起初是装置micro结构,GitHub上搜出来的micro已经不支持go-micro的一些用法,可是它极为类似,第一次运用我也不太熟悉,弄了很久发现为啥micro结构生成的代码不大对劲,然后在网上找到一篇教程,才总算解答疑惑。go-micro装置
go-micro结构装置、运用
go-micro GitHub网址
- 首要在windows上装置go-micro
go install github.com/go-micro/cli/cmd/go-micro@latest
或许
装置成功后输入go-micro -v
检查是否装置成功
- 运用go-micro new指令初始化服务
运用指令go-micro new service helloworld
就会在当前途径下创立helloworl文件夹,其中包括一个service类型的微服务。
紧接着咱们去修正proto文件,由于他初始化设置了很多参数,用来测验微服务是否能衔接成功,所以咱们只需求保留Call办法以及对应传入参数Request和传出参数Response。 界说好proto文件后,咱们创立出对应的微服务go文件
//首要需求下载依赖
make
//然后创立出依照proto文件生成的所需求的微服务go文件
make proto
咱们只保留了Call办法,然后在Call办法中完成所需求的功能,用Request和Response来传输数据。
最终咱们们修正main文件,添加consul作为服务发现
首要需求导入consul依赖,终端下运转
go get github.com/go-micro/plugins/v4/registry/consul
然后修正mian函数添加consul
//初始化consul配置
consulReg := consul.NewRegistry()
// Create service
srv := micro.NewService()
srv.Init(
micro.Name(service),
micro.Version(version),
micro.Registry(consulReg), //运用consul作为服务发现
micro.Address("127.0.0.1:1111"), //添加consul服务指定的地址
)
``````
这样一个微服务端就界说好了,接下来咱们就能够在客户端中调用了。
在client调用微服务的Call函数
首要仍然需求在client导入consul依赖,终端下运转
go get github.com/go-micro/plugins/v4/registry/consul
//初始化consul配置
consulReg := consul.NewRegistry()
//创立一个microService,运用consul默认配置
consulService := micro.NewService(
micro.Registry(consulReg),
)
request := getCaptcha.CallRequest{}
//创立micro客户端,第一个参数为服务名称,第二个参数为上面创立的consulService的Client
microClient := getCaptcha.NewGetCaptchaService("getCaptcha", consulService.Client())
//micro客户端调用call办法,运用resp接收回来的数据,
//第一个参数为context.TODO( ) , 指定一个不为空的Context
//第二个参数为request音讯体
resp, err := microClient.Call(context.TODO(), &request)
if err != nil {
fmt.Println("microClient调用Call办法失利,过错为:", err)
return
}
这便是运用go-micro结构完成一个简略的微服务完整流程了,之后运用的时分便是依照这个流程去创立微服务。
踩坑补充
在做毕设的时分,我把consul部署在一台华为云服务器上而且把微服务也运转在服务器上并注册上去了。但其时我在本机进行调试的时分,发现找到了consul可是调用不了微服务,总是报408过错。这就让我百思不得其解,还以为是我在客户端代码有问题调用失利,一直在测验修正代码仍是不行。但当微服务经过我本机注册上consul的时分又能成功调用。这么一对比才发现两个方法的不同。
consul是经过供给调用微服务的IP+端口给客户端来进行服务发现的
所以当我的微服务注册在云服务器上时,供给的是服务器内网地址,我的本机肯定调用不了才会出现超时调用不了的状况。但当我运用本机供给微服务并注册上consul,供给的是本地的socket这便是为什么本机注册的微服务能够调用成功的原因。
解决方案
将本机和另外两台服务器,经过ZeroTier One搭建小型局域网进行内网穿透,这样就能够经过consul供给的socket调用服务器上的微服务啦。