1、依赖安装
protoc
- 下载完成后解压放到指定目录,设置环境变量
- protoc --version // 测试protoc是否安装好
protoc-gen-go
- go get -v github.com/golang/protobuf/{proto,protoc-gen-go}
- go get -v github.com/micro/protoc-gen-micro
2、通讯协议
greeter.proto
syntax = "proto3";
//服务
service Greeter {
rpc Hello(HelloRequest) returns (HelloResponse) {}
}
//输入参数
message HelloRequest {
string name = 1;
}
//输出参数
message HelloResponse {
string greeting = 1;
}
编译
protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. greeter.proto
protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. path/to/proto
3、编写微服务的服务端和客户端
server.go
package main
import (
"context"
"log"
"time"
proto "github.com/micro/examples/helloworld/proto"
"github.com/micro/go-micro"
"github.com/micro/go-micro/registry/consul"
"github.com/micro/go-micro/registry"
)
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() {
// 指定服务发现的网络位置(也可以在命令行指定)
reg := consul.NewRegistry(func(op *registry.Options) {
op.Addrs = []string{"127.0.0.1:8500"}
})
service := micro.NewService(
micro.Registry(reg), //指定服务发现的网络位置
micro.Name("greeter"), //微服务名字
micro.RegisterTTL(time.Second*30), //微服务信息过期时间
micro.RegisterInterval(time.Second*20),//再次注册的时间间隔
)
service.Init()
// micro框架和接口关联,注册
proto.RegisterGreeterHandler(service.Server(), new(Greeter))
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
client.go
package main
import (
"context"
"fmt"
"github.com/micro/go-micro"
proto "hello/proto"
)
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.HelloRequest{Name: "学院君"})
if err != nil {
fmt.Println(err)
}
// Print response
fmt.Println(rsp.Greeting)
}
4、启动微服务的服务端
指定服务发现有2种方式,如下:
- 命令行指定
- 代码里嵌入指定
go run main.go
5、部署服务发现
下载
> wget https://releases.hashicorp.com/consul/1.8.0/consul_1.8.0_linux_386.zip
解压
> unzip consul_1.8.0_linux_386.zip && cd consul_1.8.0_linux_386
部署
> consul agent -dev -ui -client 0.0.0.0
6、打开consul的管理界面
浏览器地址栏输入 http://127.0.0.1:8500
7、windows下编译linux64位go可执行程序
set GOARCH=amd64
set GOOS=linux
go build
8、测试工具
micro call go.micro.srv.greeter Greeter.Hello'{"name":"wuxiangege"}'