微服务之Go-Micro(六)GRPC调用

工具下载

  • protobuf

    • https://github.com/protocolbuffers/protobuf/releases/download/v3.13.0/protoc-3.13.0-win64.zip
    • Window 下安装:
      在这里插入图片描述
      • Linux 安装
      		tar -xvf protobuf
      		cd protobuf
      		./configure --prefix=/usr/local/protobuf
      		make
      		make check
      		make install
      		```
      	- 如遇报错,则需升级gcc:
      		- error: unrecognized command line option "-std=c++11"
      
  • protoc-gen-go

    • go get github.com/golang/protobuf
      • protoc-gen-go提供了protoc编译器生成go相关api的实现,其位github.com/golang/protobuf库下。
      • protobuf库是protocol buffers协议的golang语言版实现。protoc编译器编译时需依赖它。
  • protoc-gen-micro

protos

  • Users.proto
syntax = "proto3";
package Models;
option go_package = "./;Models";

message UserModel {
  // @inject_tag: json:"uid"
  int32 UserID = 1;
  // @inject_tag: json:"name"
  string Name = 2;
}

  • UserService.proto
syntax = "proto3";
package Models;
option go_package = "./;Models";
import "Users.proto";

message UsersRequest {
  int32 size = 1;
}

message UserListResponse {
  repeated UserModel data=1;
}

service UserListService {
  rpc GetUserList(UsersRequest) returns (UserListResponse);
}

根据proto生成相关go文件

cd ../models/protos
protoc.exe --micro_out=../ --go_out=../ ./Users.proto
protoc.exe --micro_out=../ --go_out=../ ./UserService.proto
protoc-go-inject-tag.exe -input=../Users.pb.go

Client

package main

import (
	"context"
	"fmt"
	"github.com/micro/go-micro/v2"
	"github.com/micro/go-micro/v2/registry"
	"github.com/micro/go-micro/v2/registry/etcd"
	Models "go-micro-service/models"
	"log"
)

func main() {
	server := micro.NewService(
		micro.Name("user.client"),
		micro.Registry(etcd.NewRegistry(
			registry.Addrs("127.0.0.1:2379"),
		)),
	)
	userServiceClient := Models.NewUserListService("user.server", server.Client())

	resp, e :=userServiceClient.GetUserList(context.Background(), &Models.UsersRequest{Size: 5})
	if e!=nil {
		log.Fatal(e)
	}
	fmt.Println(resp)
	for r := range resp.Data {
		fmt.Println(resp.Data[r].UserID, resp.Data[r].Name)
	}
}

Server

package main

import (
	"github.com/micro/go-micro/v2"
	"github.com/micro/go-micro/v2/registry"
	"github.com/micro/go-micro/v2/registry/etcd"
	Models "go-micro-service/models"
	"go-micro-service/service"
)

func main() {
	reg := etcd.NewRegistry(
		registry.Addrs("127.0.0.1:2379"),
	)
	server:=micro.NewService(
		micro.Name("user.server"),
		micro.Registry(reg),
	)
	server.Init()
	Models.RegisterUserListServiceHandler(server.Server(), new(service.UserService))
	server.Run()
}

源码地址

  • https://github.com/AngelovLee/GoMicroService/releases/tag/1.0.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JaysenLeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值