Go Micro 初探

文章目录

  • 起步
  • 初探 Micro
  • 感谢

起步

在使用 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 微服务就搭建好了。

感谢

  • 参考 gRPC in Golang
  • 参考 Micro Docs

你可能感兴趣的:(Go)