에 Go-Micro 개발 환경 구축 방법을 소개하고 있으니, 필요한 친구들에게 도움이 되었으면 좋겠습니다!
최근에 go-micro를 사용해야 해서 마이크로서비스에 대해 배우고 있는 글입니다.
설치 환경
소스코드를 설치하는 방법은 여러가지가 있습니다
go get github.com/micro/micro/v2
docker
docker pull micro/micro
# 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"
https://github.com/micro/micro/releases
Test it
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
이제 localhost:8082
를 방문하여 마이크로 웹페이지를 확인하세요.
Protoc 설치localhost:8082
就可以查看 micro 的 web 页面了。
protoc 是 protobuf 的编译器,而 protobuf 是一种用来传输数据的格式,类似 json、xml 这些。
protoc 下载地址
https://github.com/protocolbuffers/protobuf/releases
下载好之后,bin 文件夹中有个 protoc 的可执行文件,把这个也添加到环境变量。(可以直接把它放到已经添加了环境变量的文件夹下就可以了,可以避免电脑里写满了各种环境变量,并且常用工具放到一个文件夹也方便管理)
推荐:《go语言》
还有个 protoc-gen-go 也需要放进去,可以用下面的方式下载。
go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go
现在让我们写一个 demo 来练习一下。
一共有三个文件,server.go
,client.go
,greeter.proto
syntax = "proto3";package protos;service Greeter { rpc Hello (Request) returns (Response){};}message Request { string name = 1;}message Response { string greeting = 2;}
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) }}
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)}
强烈建议使用 go mod 来管理依赖,项目更新速度很快,百度上的很多教程都不行了,安装过程各种错误
这是我的 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 文件是放在同一个文件夹下面的
protoc --micro_out=. --go_out=. greeter.proto
编译完成之后,会生成两个 go 源代码文件:
greeter.pb.go
greeter.pb.micro.go
现在可以运行 server 了,这里因为 client 和 server 是放在同一个文件夹,也就是同一个包中,两个都有 main 函数,所以不能用 go run ./
protoc 다운로드 주소
go run server.go greeter.pb.go greeter.pb.micro.go
다운로드 후 bin 폴더에 protoc 실행 파일이 있습니다. 이것을 환경 변수에 추가하세요. (환경 변수가 추가된 폴더에 직접 넣어도 됩니다. 이렇게 하면 컴퓨터가 다양한 환경 변수로 가득 차는 것을 피할 수 있고, 자주 사용하는 도구를 폴더에 넣어두는 것도 관리에 편리합니다.)
추천: "
go Languagemicro list services
example
이제 연습용 데모를 작성해 보겠습니다.
총 3개의 파일이 있습니다: server.go
, client.go
, greeter.proto
micro web
$ micro list services go.micro.web greeter
go run client.go greeter.pb.go greeter.pb.micro.go
{"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]
micro get service greeter
greeter.pb.go
greeter.pb.micro.go
< /li>$ 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 }
go run server.go greeter.pb.go greeter.pb.micro.go --server_address=localhost:8888
$ go run client.go greeter.pb.go greeter.pb.micro.go Hello Zaun pianist
위 내용은 Go-Micro 개발 환경을 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!