社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
https://micro.mu/docs
可以使用官网的获取最新二进制方式来实现:
# 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"
cd $GOPATH/pkg
sudo rm -rf *
ls
go get -u -v github.com/golang/protobuf@latest
ls -la $GOPATH/bin | grep protoc-gen-go
由于网络原因,需要多执行几次
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
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
cd ~
micro --version
不建议使用go get 的方式,涉及到新版本的go mod的导包异常问题
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
cd ~
sudo apt install -y git
git clone https://github.com/etcd-io/etcd.git
cd ~/etcd
go mod tidy
go mod verify
go mod download
go mod vendor
./build
cd bin
sudo cp * /bin/
获取帮助:etcd --help 或者 etcd -h
etcd --version
# 数据目录千万不要创建
# 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
mkdir -p $GOPATH/src/www/example/com/pb
创建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
修改的是$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";
使用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
方便后续导包异常的处理【将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
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)
修改$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
add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
cd $GOPATH/src/www/example/com/user
go mod tidy
verify dependencies have expected content (验证依赖是否正确)
cd $GOPATH/src/www/example/com/user
go mod verify
print module requirement graph (打印模块依赖图)
cd $GOPATH/src/www/example/com/user
go mod graph
不需要进行修改main.go
cd $GOPATH/src/www/example/com/user
go run main.go --registry=etcd --registry_address=127.0.0.1:2379
strings ~/workspace/etcd/data.etcd/member/wal/*.wal
或者使用过滤服务名形式:
strings ~/workspace/etcd/data.etcd/member/wal/*.wal | grep "www.example.com.service.user"
需要导入的包是:
"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
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!