真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何搭建go-micro開發(fā)環(huán)境

下面由Golang教程欄目給大家介紹搭建go-micro開發(fā)環(huán)境的方法,希望對需要的朋友有所幫助!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、任縣網(wǎng)站維護(hù)、網(wǎng)站推廣。

最近因?yàn)橐玫?go-micro,所以在學(xué)習(xí)微服務(wù)相關(guān)的內(nèi)容,這一篇是記錄 micro 的搭建過程。

安裝環(huán)境

micro 提供了一個 runtime,在使用 go-micro 之前需要先安裝它。有以下幾種方式安裝

源碼
go get github.com/micro/micro/v2

這種方式我裝不上,不是網(wǎng)絡(luò)的原因,不知道哪里有沖突。。。

docker
docker pull micro/micro
二進(jìn)制
# 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"

推薦使用這種方式下載安裝,把編譯好的二進(jìn)制包添加到環(huán)境變量就能直接使用了。不想用腳本安裝可以在 github 的 release 頁面下載

https://github.com/micro/micro/releases
測試一下

現(xiàn)在已經(jīng)安裝好 micro 了,測試一下。

micro web

輸出

$ micro web2020-07-05 04:24:16  file=http/http.go:90 level=info service=web HTTP API Listening on [::]:80822020-07-05 04:24:16  file=v2@v2.9.1/service.go:200 level=info service=web Starting [service] go.micro.web2020-07-05 04:24:16  file=grpc/grpc.go:864 level=info service=web Server [grpc] Listening on [::]:264492020-07-05 04:24:16  file=grpc/grpc.go:697 level=info service=web Registry [mdns] Registering node: go.micro.web-b76a12a1-5226-429f-9633-ce304f179657

現(xiàn)在訪問localhost:8082就可以查看 micro 的 web 頁面了。

安裝 protoc

protoc 是 protobuf 的編譯器,而 protobuf 是一種用來傳輸數(shù)據(jù)的格式,類似 json、xml 這些。
protoc 下載地址

https://github.com/protocolbuffers/protobuf/releases

下載好之后,bin 文件夾中有個 protoc 的可執(zhí)行文件,把這個也添加到環(huán)境變量。(可以直接把它放到已經(jīng)添加了環(huán)境變量的文件夾下就可以了,可以避免電腦里寫滿了各種環(huán)境變量,并且常用工具放到一個文件夾也方便管理)

推薦:《go語言》

還有個 protoc-gen-go 也需要放進(jìn)去,可以用下面的方式下載。

go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go
example

現(xiàn)在讓我們寫一個 demo 來練習(xí)一下。

一共有三個文件,server.go,client.go,greeter.proto

greeter.proto
syntax = "proto3";package protos;service Greeter {
    rpc Hello (Request) returns (Response){};}message Request {
    string name = 1;}message Response {
    string greeting = 2;}
server.go
package mainimport (
    "context"
    "fmt"
    "github.com/micro/go-micro/v2")type Greeter struct {}func (g *Greeter) Hello(context context.Context, req *Request, rsp *Response) error {
    rsp.Greeting = "Hello " + req.Name    return nil}func main() {
    service := micro.NewService(
        micro.Name("greeter"),
    )
    service.Init()

    err := RegisterGreeterHandler(service.Server(), new(Greeter))
    if err != nil {
        fmt.Println(err)
    }

    if err := service.Run(); err != nil {
        fmt.Println(err)
    }}
client.go
package mainimport (
    "context"
    "fmt"
    "github.com/micro/go-micro/v2")func main() {
    service := micro.NewService(micro.Name("greeter.client"))
    service.Init()

    greeter := NewGreeterService("greeter", service.Client())
    rsp, err := greeter.Hello(context.TODO(), &Request{Name: "Zaun pianist"})
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(rsp.Greeting)}

強(qiáng)烈建議使用 go mod 來管理依賴,項(xiàng)目更新速度很快,百度上的很多教程都不行了,安裝過程各種錯誤

這是我的 mod 文件

module hello

go 1.14require (
    github.com/golang/protobuf v1.4.0
    github.com/micro/go-micro/v2 v2.9.1
    google.golang.org/protobuf v1.22.0)

注意,我的 greeter.proto 和 server.go、client.go 文件是放在同一個文件夾下面的

編譯greeter.proto
protoc --micro_out=. --go_out=. greeter.proto

編譯完成之后,會生成兩個 go 源代碼文件:

greeter.pb.gogreeter.pb.micro.go運(yùn)行

現(xiàn)在可以運(yùn)行 server 了,這里因?yàn)?client 和 server 是放在同一個文件夾,也就是同一個包中,兩個都有 main 函數(shù),所以不能用 go run ./,至于為什么要加上另外兩個,這個是 go 語言編譯器的要求,必須要指明編譯所需要用到的文件。

go run server.go greeter.pb.go greeter.pb.micro.go

可以用 micro 來查看當(dāng)前正在運(yùn)行的微服務(wù)

micro list services

也可以在 web 端查看

micro web

如果沒有出錯,這個時候是可以看到服務(wù)已經(jīng)注冊成功了。

$ micro list services
go.micro.web
greeter
測試

現(xiàn)在可以運(yùn)行客戶端來測試一下了

go run client.go greeter.pb.go greeter.pb.micro.go

我在測試的時候出了問題,服務(wù)已經(jīng)注冊好了,但是 client 去調(diào)用的時候,缺返回了

{"id":"go.micro.client","code":408,"detail":"context deadline exceeded","status":"Request Timeout"}panic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x28 pc=0xeef454]

檢查一下服務(wù)的信息

micro get service greeter
$ micro get service greeter                                                                                    
service  greeter                                                                                               

version latest                                                                                                 

ID      Address Metadata                                                                                       
greeter-5d86321e-86f2-41a6-8230-f015466bf791    10.198.75.60:51395      broker=http,protocol=grpc,registry=mdns,server=grpc,transport=grpc                                                                                    

Endpoint: Greeter.Hello                                                                                        

Request: {                                                                                                       message_state MessageState {                                                                                     no_unkeyed_literals NoUnkeyedLiterals                                                                    do_not_compare DoNotCompare                                                                              do_not_copy DoNotCopy                                                                                    message_info MessageInfo                                                                         }                                                                                                        int32 int32                                                                                              unknown_fields []uint8                                                                                   name string                                                                                            
}                                                                                                              Response: {                                                                                                      message_state MessageState {                                                                                     no_unkeyed_literals NoUnkeyedLiterals                                                                    do_not_compare DoNotCompare                                                                              do_not_copy DoNotCopy                                                                                    message_info MessageInfo                                                                         }                                                                                                        int32 int32                                                                                              unknown_fields []uint8                                                                                   greeting string                                                                                        
}

注意看里面的 IP 地址,注冊到了 10.198.xx 去了,因此才會報錯???
因此在注冊服務(wù)的時候,指定 IP 地址

go run server.go greeter.pb.go greeter.pb.micro.go --server_address=localhost:8888

這個時候再用 client 調(diào)用就不會出錯了。

$ go run client.go greeter.pb.go greeter.pb.micro.go
Hello Zaun pianist

分享名稱:如何搭建go-micro開發(fā)環(huán)境
分享網(wǎng)址:http://weahome.cn/article/cgejij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部