Golang 微服务 - 02 入门微服务框架 go-micro

安装

安装 go-micro,使用 Git Bash Here,输入如下命令

cd $GOPATH/src
go get -u github.com/micro/go-micro

此过程中会安装 mdns 等

实操

下面以 micro/go-micro 首页中的 Greeter 例子出发(顺序和运行命令略有调整)

Create service proto

定义服务的名称 Greeter,服务的接口 Hello,接口的 Request 和 Response

// $GOPATH/greeter/proto/greeter.proto
syntax = "proto3";

service Greeter {
	rpc Hello(HelloRequest) returns (HelloResponse) {}
}

message HelloRequest {
	string name = 1;
}

message HelloResponse {
	string greeting = 2;
}

Generate the proto

使用 Git Bash Here,输入如下命令,将生成 $GOPATH/greeter/proto/greeter.pb.go

cd $GOPATH/src/greeter
protoc -I. --go_out=plugins=micro:$GOPATH/src/greeter proto/greeter.proto

protoc 的具体参数,可以查阅官方文档

Write the service

在 $GOPATH/src/greeter 中创建 service.go,内容如下

package main

import (
	"context"
	"fmt"

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

type Greeter struct{}

func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error {
	rsp.Greeting = "Hello " + req.Name
	return nil
}

func main() {
	// Create a new service. Optionally include some options here.
	service := micro.NewService(
		micro.Name("greeter"),
	)

	// Init will parse the command line flags.
	service.Init()

	// Register handler
	proto.RegisterGreeterHandler(service.Server(), new(Greeter))

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

创建名为 greeter 的服务,初始化后,将该服务注册到相应Handler

Define the client

在 $GOPATH/src/greeter 中创建 client.go,内容如下

package main

import (
	"context"
	"fmt"

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

func main() {
	// Create a new service. Optionally include some options here.
	service := micro.NewService(micro.Name("greeter.client"))
	service.Init()

	// Create new greeter client
	greeter := proto.NewGreeterClient("greeter", service.Client())

	// Call the greeter
	rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{Name: "John"})
	if err != nil {
		fmt.Println(err)
	}

	// Print response
	fmt.Println(rsp.Greeting)
}

创建名为 greeter.client 的服务,初始化后,获取并连接名为 greeter 的服务,使用连接得到的客户端远程调用 Hello 接口

Run and Output

使用 Git Bash Here,输入如下命令,启动服务端 service.go

cd $GOPATH/src/greeter
MICRO_REGISTRY=mdns go run service.go

输入结果是

2018/09/15 21:24:11 Listening on [::]:55215
2018/09/15 21:24:11 Broker Listening on [::]:55216
2018/09/15 21:24:11 Registering node: greeter-a1e03404-b8ea-11e8-81ad-0a0027000009

使用 mdns (multicast dns) 的方式来启动服务端(go-micro 默认使用 consul 做服务注册,这里简化了,consul 会在下一篇讲到)

服务端监听两个端口,Ctrl+C 可关闭服务端(会得到 Deregistering node: greeter-a1e03404-b8ea-11e8-81ad-0a0027000009)

使用 Git Bash Here,另起一个窗口,输入如下命令,启动客户端 client.go

cd $GOPATH/src/greeter
MICRO_REGISTRY=mdns go run client.go

输入结果是

Hello John

 使用 mdns (multicast dns) 的方式来启动客户端

总结

  1. 使用 protoc 生成了服务端和客户端之间的接口
  2. 编写服务端 service.go 和客户端 client.go
  3. 使用 mdns 方式启动,客户端顺利访问到服务端

参考

《micro/go-micro》https://github.com/micro/go-micro

《Getting started, gRPC》https://dzone.com/articles/create-versatile-microservices-in-golang-part-1

《Docker and micro》https://dzone.com/articles/create-versatile-microservices-in-golang-part-2-do

转载于:https://my.oschina.net/deltatech/blog/2051885

你可能感兴趣的:(Golang 微服务 - 02 入门微服务框架 go-micro)