标签:protobuf gRPC micro user etcd go com mod
Microservice-微服务-micro/v2-etcd/v3-protobuf-gRPC-ubuntu
- 1.升级至micro/v2
- 2.etcd/v3
- 3.创建service
- 1.创建目录,剥离pb.go文件
- 2.service创建
- 3.修改.proto文件
- 4.进行编译.proto
- 5.go mod init [*.pb.go目录]
- 6.go mod why
- 7.修改go.mod 文件
- 8.go mod tidy
- 9.go mod verify
- 10.go mod graph【选择性操作】
- 11.启动
- 更多
更多请参考:
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
标签:protobuf,gRPC,micro,user,etcd,go,com,mod 来源: https://blog.csdn.net/weixin_42366378/article/details/105903296
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。