Microservice(十一)[微服务-micro/v2-etcd/v3-protobuf-gRPC-ubuntu] - Go语言中文社区

Microservice(十一)[微服务-micro/v2-etcd/v3-protobuf-gRPC-ubuntu]



更多请参考:

https://micro.mu/docs

1.升级至micro/v2

可以使用官网的获取最新二进制方式来实现:

# MacOS
curl -fsSL https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh | /bin/bash

# Linux
wget -q  https://raw.githubusercontent.com/micro/micro/master/scripts/install.sh -O - | /bin/bash

# Windows
powershell -Command "iwr -useb https://raw.githubusercontent.com/micro/micro/master/scripts/install.ps1 | iex"

1.删除原来的go mod 所在目录

cd $GOPATH/pkg
sudo rm -rf *
ls

2.下载protobuf

go get -u -v github.com/golang/protobuf@latest
ls -la $GOPATH/bin | grep protoc-gen-go

3.下载micro/v2

由于网络原因,需要多执行几次

go get -u -v github.com/micro/micro/v2

最后会有如下错误,是由于go.mod的异常导致的,可以暂时不管

go get: github.com/mholt/certmagic@v0.9.3 updating to
	github.com/mholt/certmagic@v0.10.12: parsing go.mod:
	module declares its path as: github.com/caddyserver/certmagic
	        but was required as: github.com/mholt/certmagic

在这里插入图片描述

4.编译安装micro/v2

cd $GOPATH/pkg/mod/github.com/micro/micro/v2*
# explain why packages or modules are needed(解释为什么需要依赖)
go mod why
# add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
go mod tidy
# verify dependencies have expected content (验证依赖是否正确)
go mod verify
sudo $GOROOT/bin/go build -o /bin/micro main.go

5.查看版本

cd ~
micro --version

在这里插入图片描述

2.etcd/v3

1.下载安装

不建议使用go get 的方式,涉及到新版本的go mod的导包异常问题

1.解决git clone速度慢

sudo cp /etc/hosts /etc/hosts.backup 
curl -skX GET 'https://github.com.ipaddress.com/' | grep -oP '<th>IPv4 Addresses</th><td><ul class="comma-separated"><li>.*?</li>'| grep -oP '[0-9]+.[0-9]+.[0-9]+.[0-9]+'| awk '{print $1" github.com"}'> ~/myhosts
curl -skX GET 'https://fastly.net.ipaddress.com/github.global.ssl.fastly.net' | grep -oP '<th>IPv4 Addresses</th><td><ul class="comma-separated"><li>.*?</li>'| grep -oP '[0-9]+.[0-9]+.[0-9]+.[0-9]+'| awk '{print $1" github.global.ssl.fastly.net"}'>> ~/myhosts    
sudo /bin/bash -c 'cat ~/myhosts>>/etc/hosts'
cat /etc/hosts
sudo service networking restart
rm -f ~/myhosts    

2.git clone

cd ~
sudo apt install -y git 
git clone https://github.com/etcd-io/etcd.git   

3.安装

cd ~/etcd
go mod tidy
go mod verify
go mod download
go mod vendor
./build
cd bin 
sudo cp * /bin/

2.测试

获取帮助:etcd --help 或者 etcd -h

etcd --version

在这里插入图片描述

3.单机启动etcd v3

# 数据目录千万不要创建
# mkdir -p ~/workspace/etcd/data.etcd/
rm -rf  ~/workspace/etcd/
# 日志目录
rm -rf ~/workspace/etcd/log/
mkdir -p ~/workspace/etcd/log/
etcd --data-dir ~/workspace/etcd/data.etcd/ --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 & >~/workspace/etcd/log/etcd.log

在这里插入图片描述

新开终端etcdctl命令 查看

etcdctl --endpoints 127.0.0.1:2379 endpoint status --write-out="table"
# 或者使用
# ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 endpoint status --write-out="table"

在这里插入图片描述
新开终端查看目前的数据信息

strings ~/workspace/etcd/data.etcd/member/wal/*.wal

在这里插入图片描述

3.创建service

1.创建目录,剥离pb.go文件

mkdir -p $GOPATH/src/www/example/com/pb

2.service创建

创建service【srv】服务,并自定义命名空间www.example.com【默认是go.micro】
1.服务名称的最后一级不要使用下划线,否则生成的handler/最后一级目录名.go中的服务还要做修改,【protobuf生成的时候的服务命名规则问题】
2.type的类型不再是之前的srv,而是service
3.默认为当前路径创建,不再使用$GOPATH的路径,如果需要的话,需要自行先进入$GOPATH路径

cd $GOPATH/src
micro new --type service --namespace www.example.com www/example/com/user
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u github.com/micro/protoc-gen-micro/v2
# 解决grpc和protoc版本冲突的问题
go get -u -v  github.com/golang/protobuf/protoc-gen-go@v1.2.0

3.修改.proto文件

修改的是$GOPATH/src/www/example/com/user/proto/user.proto

package www.example.com.service.user;
option go_package = "proto/user;www_example_com_service_user";

在这里插入图片描述

4.进行编译.proto

使用grpc插件进行编译

cd $GOPATH/src/www/example/com/user
protoc --proto_path=.:$GOPATH/src --go_out=plugins=grpc:$GOPATH/src/www/example/com/pb --micro_out=plugins=grpc:$GOPATH/src/www/example/com/pb proto/user/user.proto

5.go mod init [*.pb.go目录]

方便后续导包异常的处理【将proto文件从本地导入(pb.go文件所在目录)】

tree $GOPATH/src/www/example/com
cd $GOPATH/src/www/example/com/pb/proto/user/ && go mod init www/example/com/pb/proto/user && cd $GOPATH/src/www/example/com/user

6.go mod why

explain why packages or modules are needed(解释为什么需要依赖)

cd $GOPATH/src/www/example/com/user
go mod why
www/example/com/user imports
	www/example/com/user/proto/user: package www/example/com/user/proto/user is not in GOROOT (/usr/local/go/src/www/example/com/user/proto/user)

在这里插入图片描述

7.修改go.mod 文件

修改$GOPATH/src/www/example/com/user下的go.mod 文件

追加【本地只能是相对路径(=>后面的部分必须是相对路径),换行符不要动】

cd $GOPATH/src/www/example/com/user
tee -a $GOPATH/src/www/example/com/user/go.mod <<-'EOF'

// 添加是针对proto文件的本地包导入问题处理:只有这个能被go mod why检测到
require "www/example/com/user/proto/user" v0.0.0
replace "www/example/com/user/proto/user" => "../pb/proto/user"
// 解决go get -u -v github.com/micro/micro/v2的问题:
// module declares its path as: github.com/caddyserver/certmagic
// but was required as: github.com/mholt/certmagic
replace github.com/mholt/certmagic => github.com/caddyserver/certmagic latest
EOF

再次执行

go mod why

在这里插入图片描述

8.go mod tidy

add missing and remove unused modules(拉取缺少的模块,移除不用的模块)

cd $GOPATH/src/www/example/com/user
go mod tidy

9.go mod verify

verify dependencies have expected content (验证依赖是否正确)

cd $GOPATH/src/www/example/com/user
go mod verify

10.go mod graph【选择性操作】

print module requirement graph (打印模块依赖图)

cd $GOPATH/src/www/example/com/user
go mod graph	

11.启动

不需要进行修改main.go

1.命令注册

cd $GOPATH/src/www/example/com/user
go run main.go --registry=etcd --registry_address=127.0.0.1:2379

在这里插入图片描述

2.查看etcd数据信息

strings ~/workspace/etcd/data.etcd/member/wal/*.wal

或者使用过滤服务名形式:

strings ~/workspace/etcd/data.etcd/member/wal/*.wal | grep "www.example.com.service.user"

在这里插入图片描述

3.修改main.go方式的注册

需要导入的包是:

"github.com/micro/go-micro/v2/registry"
"github.com/micro/go-plugins/registry/etcdv3/v2"

main()方法中:

reg := etcdv3.NewRegistry(func(op *registry.Options) {
	op.Addrs = []string{"http://127.0.0.1:2379"}
})

// New Service
service := micro.NewService(
	micro.Name("www.example.com.service.user"),
	micro.Version("latest"),
	micro.Registry(reg),
)

启动命令:

cd $GOPATH/src/www/example/com/user
go run main.go

更多

web的创建参照之前的micro/v2的grpc版本,etcd的导包做响应修改即可etcdv3
micro/v2
的更多参考:

https://etcd.io/docs/v3.4.0/
``
```http
https://micro.mu/docs
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42366378/article/details/105903296
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 01:45:05
  • 阅读 ( 2572 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢