consul是微服务中常用的中间件,可以提供注册服务,go-micro是golang的微服务框架,拥有服务端和客户端,默认使用protobuf作为通信协议的定义,consul和go-micro是可以合作的。下面开始吧。
1、编写person.proto文件
syntax = "proto3";
package go.micro.service.person;
option go_package="../service";
//定义服务
service Say{
rpc SayHello(SayRequest) returns(SayResponse){}
}
message SayRequest{
string message = 1;
}
message SayResponse{
string answer = 1;
}
2、在pb目录下,执行以下命令:
protoc --proto_path=. --micro_out=. --go_out=:. person.proto
就会生成:
3、编写服务端:server.go
package main
import (
"context"
"fmt"
"github.com/hashicorp/consul/api"
pb "go-micro-project/service"
"go-micro.dev/v4"
)
type SayServer struct {
}
//需要实现的方法
func (c *SayServer) SayHello(ctx context.Context, req *pb.SayRequest, res *pb.SayResponse) error {
res.Answer = "IT编程自学:"+req.Message
return nil
}
//replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
var service = "person.server"
func main() {
// go-micro服务,注册到consul上.
// 1. 初始化consul 配置
consulConfig := api.DefaultConfig()
// 2. 创建 consul 对象
consulClient, err := api.NewClient(consulConfig)
if err != nil {
fmt.Println("api.NewClient err:", err)
return
}
// 3. 告诉consul, 即将注册的服务的配置信息
reg := api.AgentServiceRegistration {
ID:"gz139",
Tags:[]string{"go-micro", "consul"},
Name:service,
Address:"127.0.0.1",
Port:8800,
Check:&api.AgentServiceCheck{
CheckID:"consul go-micro test",
TCP:"127.0.0.1:8800",
Timeout:"1s",
Interval:"5s",
},
}
// 4. 注册 go-micro 服务到 consul 上
consulClient.Agent().ServiceRegister(®)
//创建新的服务
srv := micro.NewService(
micro.Name(service),
micro.Address("127.0.0.1:8800"),
)
srv.Init()
//初始化方法
if err := pb.RegisterSayHandler(srv.Server(), new(SayServer)); err != nil {
fmt.Println(err)
}
//运行服务
if err := srv.Run(); err != nil {
fmt.Println(err)
}
}
4、编写client.go
package main
import (
"context"
"fmt"
"github.com/go-micro/plugins/v4/registry/consul"
pb "go-micro-project/service"
"go-micro.dev/v4"
"go-micro.dev/v4/client"
)
var service = "person.server"
func main() {
registry := consul.NewRegistry()
// 实例化
srv := micro.NewService(
micro.Client(client.NewClient()),
micro.Registry(registry),
)
//初始化
srv.Init()
// 创建客户端
c := pb.NewSayService(service, srv.Client())
//调用服务端方法
res,err := c.SayHello(context.TODO(),&pb.SayRequest{Message: "上手微服务"})
if err != nil{
fmt.Println(err)
}
fmt.Println(res.Answer)
}
5、启动consul:
consul agent -dev
6、启动server.go服务
7、运行client.go
这节完毕。