下面由golang教程栏目给大家介绍搭建go-micro开发环境的方法,希望对需要的朋友有所帮助!
最近因为要用到 go-micro,所以在学习微服务相关的内容,这一篇是记录 micro 的搭建过程。
安装环境
micro 提供了一个 runtime,在使用 go-micro 之前需要先安装它。有以下几种方式安装
源码
go get github.com/micro/micro/v2这种方式我装不上,不是网络的原因,不知道哪里有冲突。。。
docker
docker pull micro/micro二进制
# macoscurl -fssl https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh | /bin/bash# linuxwget -q https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh -o - | /bin/bash# windowspowershell -command "iwr -useb https://raw.githubusercontent.com/micro/micro/master/scripts/install.ps1 | iex"推荐使用这种方式下载安装,把编译好的二进制包添加到环境变量就能直接使用了。不想用脚本安装可以在 github 的 release 页面下载
https://github.com/micro/micro/releases测试一下
现在已经安装好 micro 了,测试一下。
micro web输出
$ micro web2020-07-05 04:24:16 file=http/http.go:90 level=info service=web http api listening on [::]:80822020-07-05 04:24:16 file=v2@v2.9.1/service.go:200 level=info service=web starting [service] go.micro.web2020-07-05 04:24:16 file=grpc/grpc.go:864 level=info service=web server [grpc] listening on [::]:264492020-07-05 04:24:16 file=grpc/grpc.go:697 level=info service=web registry [mdns] registering node: go.micro.web-b76a12a1-5226-429f-9633-ce304f179657现在访问localhost:8082 就可以查看 micro 的 web 页面了。
安装 protoc
protoc 是 protobuf 的编译器,而 protobuf 是一种用来传输数据的格式,类似 json、xml 这些。
protoc 下载地址
https://github.com/protocolbuffers/protobuf/releases下载好之后,bin 文件夹中有个 protoc 的可执行文件,把这个也添加到环境变量。(可以直接把它放到已经添加了环境变量的文件夹下就可以了,可以避免电脑里写满了各种环境变量,并且常用工具放到一个文件夹也方便管理)
推荐:《go语言》
还有个 protoc-gen-go 也需要放进去,可以用下面的方式下载。
go get -u github.com/golang/protobuf/protogo get -u github.com/golang/protobuf/protoc-gen-goexample
现在让我们写一个 demo 来练习一下。
一共有三个文件,server.go,client.go,greeter.proto
greeter.proto
syntax = "proto3";package protos;service greeter { rpc hello (request) returns (response){};}message request { string name = 1;}message response { string greeting = 2;}server.go
package mainimport ( "context" "fmt" "github.com/micro/go-micro/v2")type greeter struct {}func (g *greeter) hello(context context.context, req *request, rsp *response) error { rsp.greeting = "hello " req.name return nil}func main() { service := micro.newservice( micro.name("greeter"), ) service.init() err := registergreeterhandler(service.server(), new(greeter)) if err != nil { fmt.println(err) } if err := service.run(); err != nil { fmt.println(err) }}client.go
package mainimport ( "context" "fmt" "github.com/micro/go-micro/v2")func main() { service := micro.newservice(micro.name("greeter.client")) service.init() greeter := newgreeterservice("greeter", service.client()) rsp, err := greeter.hello(context.todo(), &request{name: "zaun pianist"}) if err != nil { fmt.println(err) } fmt.println(rsp.greeting)}强烈建议使用 go mod 来管理依赖,项目更新速度很快,百度上的很多教程都不行了,安装过程各种错误
这是我的 mod 文件
module hellogo 1.14require ( github.com/golang/protobuf v1.4.0 github.com/micro/go-micro/v2 v2.9.1 google.golang.org/protobuf v1.22.0)注意,我的 greeter.proto 和 server.go、client.go 文件是放在同一个文件夹下面的
编译greeter.proto
protoc --micro_out=. --go_out=. greeter.proto编译完成之后,会生成两个 go 源代码文件:
greeter.pb.gogreeter.pb.micro.go运行
现在可以运行 server 了,这里因为 client 和 server 是放在同一个文件夹,也就是同一个包中,两个都有 main 函数,所以不能用 go run ./,至于为什么要加上另外两个,这个是 go 语言编译器的要求,必须要指明编译所需要用到的文件。
go run server.go greeter.pb.go greeter.pb.micro.go可以用 micro 来查看当前正在运行的微服务
micro list services也可以在 web 端查看
micro web如果没有出错,这个时候是可以看到服务已经注册成功了。
$ micro list servicesgo.micro.webgreeter测试
现在可以运行客户端来测试一下了
go run client.go greeter.pb.go greeter.pb.micro.go我在测试的时候出了问题,服务已经注册好了,但是 client 去调用的时候,缺返回了
{"id":"go.micro.client","code":408,"detail":"context deadline exceeded","status":
没有坐机紧急联系手机号是俄罗斯云服务器怎么付款广东联通租赁服务器云主机设置如何注册一个好域名?注册一个好域名有怎么的意义呢?Excel如何在计算函数比对的同时自动标记上升或下降的箭头干货分享 电商运营需注意的6大事项点点客助力新零售 产品全线对接小程序企业App如何转向单页设计?