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

nnealguo · · 973 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

安装

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

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

可能需要安装 mdns,命令是 go get -u github.com/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

本文来自:开源中国博客

感谢作者:nnealguo

查看原文:Golang 微服务 - 02 入门微服务框架 go-micro

入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

973 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传