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/[email protected] updating to
	github.com/mholt/[email protected]: 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/[email protected]

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章