天天看點

如何編寫結合consul的go-micro微服務執行個體

作者:程式設計自學

consul是微服務中常用的中間件,可以提供注冊服務,go-micro是golang的微服務架構,擁有服務端和用戶端,預設使用protobuf作為通信協定的定義,consul和go-micro是可以合作的。下面開始吧。

1、編寫person.proto檔案

如何編寫結合consul的go-micro微服務執行個體
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

如何編寫結合consul的go-micro微服務執行個體

就會生成:

如何編寫結合consul的go-micro微服務執行個體

3、編寫服務端:server.go

如何編寫結合consul的go-micro微服務執行個體
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

如何編寫結合consul的go-micro微服務執行個體
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

如何編寫結合consul的go-micro微服務執行個體
如何編寫結合consul的go-micro微服務執行個體

6、啟動server.go服務

如何編寫結合consul的go-micro微服務執行個體
如何編寫結合consul的go-micro微服務執行個體

7、運作client.go

如何編寫結合consul的go-micro微服務執行個體

這節完畢。

繼續閱讀