Go Micro 初探

Go 小记 2020-02-17 2788 字 2576 浏览 点赞

起步

在使用 go-micro 之前,我们需要做一些环境准备。

$ go get github.com/micro/protoc-gen-micro/v2

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

然后安装 protoc,这是软件下载连接。我用的操作系统是 centos 7,因此下载的是:protoc-3.11.4-linux-x86_64.zip

$ uzip protoc-3.11.4-linux-x86_64.zip -d protoc
$ mv protoc /usr/local/
$ ln -s /usr/local/protoc/bin/protoc /usr/sbin

如果你在终端能够正常使用 protoc (protoc -h)命令,那么环境就准备 OK 了。

初探 Micro

第一步:创建项目目录。

$ mkdir hello-world
$ cd hello-world && mkdir server client proto
$ go mod init hello-world

第二步:创建 greeter.proto (vim proto/greeter.proto)。

syntax="proto3";

package hello_world;
option go_package = "proto";

service Greeter {
    rpc Hello(Request) returns (Response) {}
}

message Request {
    string name = 1;
}

message Response {
    string msg = 1;
}

package hello_world 声明项目名;option go_package = "proto" 声明 proto 的包名。

利用 protoc “解释” proto 文件:

$ protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. proto/greeter.proto

第三步:编写服务器 server (vim server/main.go)。

package main

import (
    "context"
    "fmt"
    "hello-world/proto"

    "github.com/micro/go-micro/v2"
)

type Greeter struct{}

func (g *Greeter) Hello(ctx context.Context, req *proto.Request, rsp *proto.Response) error {
    rsp.Msg = "Name: " + req.Name // 对客户端传递的字符串做处理
    return nil
}

func main() {
    // 创建服务器
    service := micro.NewService(
        micro.Name("greeter"),
    )
    service.Init()
    // 注册 handler
    proto.RegisterGreeterHandler(service.Server(), new(Greeter))

    if err := service.Run(); err != nil {
        fmt.Println(err.Error())
    }
}

第四步:编写客户端 client (vim client/main.go)。

package main

import (
    "context"
    "fmt"
    "hello-world/proto"

    "github.com/micro/go-micro/v2"
)

func main() {
    service := micro.NewService(micro.Name("greeter.client"))
    service.Init()
    // 创建 greeter 客户端
    greeter := proto.NewGreeterService("greeter", service.Client())
    // 调用 Greeter.Hello
    rsp, err := greeter.Hello(context.TODO(), &proto.Request{Name: "Zhong"})
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(rsp.Msg)
}

第五步:启动服务器。

$ go run server/main.go

最后启动客户端:

$ go run client/main.go

如果不出意外,客户端运行后打印 Name: Zhong 字样。一个简单的 micro 微服务就搭建好了。

感谢



本文由 Guan 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论