微服务系列(5)Micro
微服务系列(5)Micro
1. 准备etcd
这边使用etcd作为服务发现工具,你也可以使用consul或者其它服务发现工具
下载etcd
直接下载二进制包运行,下载地址:https://github.com/etcd-io/etcd/releases
1wget https://github.com/etcd-io/etcd/releases/download/v3.4.4/etcd-v3.4.4-linux-amd64.tar.gz
2tar xf etcd-v3.4.4-linux-amd64.tar.gz -C /usr/bin/ --strip-components 1 etcd-v3.4.4-linux-amd64/{etcd,etcdctl}
验证安装
1etcd --version
运行etcd
1etcd --logger=zap
更多使用方法
1etcd --help
2. Micro简介
Micro解决了构建云本地系统的关键需求。它采用了微服务体系结构模式,并将其转换为一组工具,作为可伸缩平
台的构建块。Micro隐藏了分布式系统的复杂性,并为开发人员提供了很好的理解概念。
Micro是一个专注于简化分布式系统开发的微服务生态系统。是一个工具集合, 通过将微服务架构抽象成一组工具。
隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。
3. Micro安装
Go语言版本的,下载之后只有一个二进制包
下载地址:https://github.com/micro/micro/releases
1wget https://github.com/micro/micro/releases/download/v2.2.0/micro-v2.2.0-linux-amd64.tar.gz
2tar xvf micro-v2.2.0-linux-amd64.tar.gz -C /usr/bin/ micro
验证安装
1micro --version
2micro version 2.2.0
4. 创建微服务
micro命令说明
new
: 创建通过指定相对于$GOPATH的目录路径,创建一个新的微服务
--namespace
: 服务的命名空间,默认为go.micro
--type
: 服务类型,有api
, fnc
, srv
, web
,默认为srv
run
: 运行微服务
创建2个微服务
创建一个srv服务
1cd $GOPATH/src/
2micro new --type "srv" micro_demo/rpc/srv
3# srv 表示当前创建的微服务类型
4Creating service go.micro.srv.srv in micro_demo/rpc/srv
5
6.
7├── main.go
8├── generate.go
9├── plugin.go
10├── handler
11│ └── srv.go
12├── subscriber
13│ └── srv.go
14├── proto/srv
15│ └── srv.proto
16├── Dockerfile
17├── Makefile
18├── README.md
19├── .gitignore
20└── go.mod
21
22
23download protobuf for micro:
24
25brew install protobuf
26go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
27go get -u github.com/micro/protoc-gen-micro/v2
28
29compile the proto file srv.proto:
30
31cd micro_demo/rpc/srv
32protoc --proto_path=.:$GOPATH/src --go_out=. --micro_out=. proto/srv/srv.proto
根据上面的提示,srv服务需要安装protoc,protoc-gen-go,protoc-gen-micro,然后编译proto文件
下载protoc:https://github.com/protocolbuffers/protobuf/releases
下载对应平台的二进制包,解压到PATH目录下
1go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
2go get -u github.com/micro/protoc-gen-micro/v2
3
4cd micro_demo/rpc/srv
5protoc --proto_path=.:$GOPATH/src --go_out=. --micro_out=. proto/srv/srv.proto
执行完会在proto/srv
下生成2个go文件
1ls -lh proto/srv
2total 48
3-rw-r--r-- 1 jerry staff 11K 3 15 10:14 srv.pb.go
4-rw-r--r-- 1 jerry staff 6.4K 3 15 10:14 srv.pb.micro.go
5-rw-r--r-- 1 jerry staff 511B 3 15 10:12 srv.proto
接着创建一个web服务
1cd $GOPATH/src
2micro new --type "web" micro_demo/rpc/web
3Creating service go.micro.web.web in micro_demo/rpc/web
4
5.
6├── main.go
7├── plugin.go
8├── handler
9│ └── handler.go
10├── html
11│ └── index.html
12├── Dockerfile
13├── Makefile
14├── README.md
15├── .gitignore
16└── go.mod
5. 运行微服务
运行srv服务
1cd $GOPATH/src/micro_demo/rpc/srv
2# 指定MICRO_REGISTRY,不指定默认为mdns
3MICRO_REGISTRY=etcd go run main.go
42020-03-15 11:24:46 Starting [service] go.micro.srv.srv
52020-03-15 11:24:46 Server [grpc] Listening on [::]:63628
62020-03-15 11:24:46 Broker [eats] Connected to [::]:63630
72020-03-15 11:24:46 Registry [etcd] Registering node: go.micro.srv.srv-f3ecce4f-9059-483c-a924-4d539def8875
82020-03-15 11:24:46 Subscribing to topic: go.micro.srv.srv
拷贝一份proto到web目录
1cd $GOPATH/src/micro_demo/rpc/web
2cp -r ../srv/proto .
修改web服务的handler
将之前的
1web "path/to/service/proto/web"
修改为
1web "micro_demo/rpc/web/proto/srv"
同时修改调用后台的服务名称和方法
1 // call the backend service
2 webClient := web.NewSrvService("go.micro.srv.srv", client.DefaultClient)
3 rsp, err := webClient.Call(context.TODO(), &web.Request{
4 Name: request["name"].(string),
5 })
修改main.go监听地址
默认情况下没有指定端口,是一个随机的端口,我们将其固定一下
1 // create new web service
2 service := web.NewService(
3 web.Name("go.micro.web.web"),
4 web.Version("latest"),
5 web.Address("127.0.0.1:8080"),
6 )
运行web服务
1MICRO_REGISTRY=etcd go run main.go
6. 检查
测试页面调用
打开浏览器,http://127.0.0.1:8080进行访问
输入一个名字,点击submit,能得到服务端给的响应,说明后端服务请求正常。
查看etcd
1etcdctl get /micro/registry --prefix --keys-only
2/micro/registry/go.micro.nats.broker/NBE54BUS25WS2NYS6LUSOGXJV5INM3VCMPKNC7Q4MZX7AW3OAM6POJW4
3
4/micro/registry/go.micro.srv.srv/go.micro.srv.srv-f3ecce4f-9059-483c-a924-4d539def8875
5
6/micro/registry/go.micro.web.web/52c8a73b-fca6-44ca-ab42-bc353e883316
发现服务也已经正常注册上来了。
- 原文作者:黄忠德
- 原文链接:https://huangzhongde.cn/post/2020-03-15-Microservice_Micro/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。