搭建gomicro/v2微服务

  |   0 评论   |   0 浏览

环境配置

  1. 安装protobuf

    brew install protobuf

  2. 安装 protoc-gen-go 以及 protoc-gen-micro

    go get github.com/micro/protoc-gen-micro/v2
    go get -u -v github.com/golang/protobuf/{proto,protoc-gen-go}

    这里如果要注意grpc版本 要使用v1.26.0, 否则编译报错 如果发现gomod 版本不对可以使用命令修改grpc版本号

    go mod edit -replace google.golang.org/grpc@v1.31.1=google.golang.org/grpc@v1.26.0

  3. 生成micro.go文件

    • 首先定义一个proto文件
syntax = "proto3";
package protos;

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

message Request {
    string name = 1;
}

message Response {
    string greeting = 2;
}
  • 执行命令生成pb.micro.go文件以及pb.go

protoc --micro_out=. --go_out=. api.proto

  • 现在可以看到protos目录中生成了两个文件。
api.pb.go
api.pb.micro.go

实现服务

  1. 定义服务接口
type Greeter struct {
}

func (g *Greeter) Hello(context context.Context, req *protos.Request, rsp *protos.Response) error {
	rsp.Greeting = "Hello " + req.Name
	return nil
}
  1. 注册服务
package main

import (
	"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 := protos.RegisterGreeterHandler(service.Server(), new(Greeter))
	if err != nil {
		fmt.Println(err)
	}

	if err := service.Run(); err != nil {
		fmt.Println(err)
	}
}
  1. 启动服务,会看到控制台输出
$ go run server.go
2020-03-27 11:28:20 Starting [service] greeter
2020-03-27 11:28:20 Server [grpc] Listening on [::]:63763
2020-03-27 11:28:20 Registry [mdns] Registering node: greeter-8afc1183-a159-4473-a567-c13b83d1d75c

客户端调用

  1. 创建client.go文件
func main() {
	service := micro.NewService(micro.Name("greeter.client"))
	service.Init()

	greeter := protos.NewGreeterService("greeter", service.Client())
	rsp, err := greeter.Hello(context.TODO(), &protos.Request{Name: "xiaoming"})
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(rsp.Greeting)
}
  1. 控制台输出
$ go run client.go
Hello xiaoming

标题:搭建gomicro/v2微服务
作者:疲惫的怪神明