设为首页 加入收藏

TOP

grpc的使用(一)
2023-07-23 13:29:09 】 浏览:166
Tags:grpc
  1. 需要保证电脑中安装了:protobuf安装教程
  2. 如果出现报错请看博客:protobuf报错问题解决
  3. 基本使用demo地址:demo
  4. 安全传输、流式传输的demo地址:demo2

简介:

rpc微服务,grpc是一种开源的高性能RPC框架,能够运行在任何环境中,最初由谷歌进行开发,它使用HTTP2作为传输协议。grpc让客户端可以像调用本地方法一样调用其他服务器上的服务应用程序,可以更容易的创建分布式应用程序和服务。能让我们更容易的编写跨语言的分布式代码。本示例使用protocol buffers(简写:protobuf),使用protobuf可以高效的序列化,简单的IDL(接口描述语言)并且容易进行接口更新。

一、安装gRPC

  1. 安装grpc执行命令

    go get google.golang.org/grpc@latest

  2. 安装Protocol Buffers v3

    安装方法就是文章开头1的protobuf链接

  3. 安装插件

    安装go语言插件,这个插件会根据.proto文件生成一个后缀为.pb.go的文件:
    该文件文件中包含定义的类型及其序列化方法

    go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28

    安装grpc插件,这个插件会生成_grpc.pb.go后缀的文件:
    该文件中包含接口类型(或存根),提供给客户端调用的服务方法;服务器需要实现的接口类型

    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

  4. 默认将插件安装到$GOPATH/bin路径下,具体配置在文章开头第1条安装方式博客中已经写好

二、基本使用

  1. 按照博客写完demo后的目录结构:

    user@C02FP58GML7H grpc-demo-master % tree
    .
    ├── LICENSE
    ├── README.en.md
    ├── README.md
    ├── client
    │   ├── grpc_client.go
    │   └── pb
    │       ├── product.pb.go
    │       └── product_grpc.pb.go
    ├── go.mod
    ├── go.sum
    ├── grpc_server.go
    ├── pb
    │   ├── product.pb.go
    │   └── product_grpc.pb.go
    ├── pbfile
    │   └── product.proto
    └── service
        └── product.go
    
  2. 创建proto文件

    • 创建一个名为project-demo的go项目

    • project-demo目录下创建文件夹pbfile

    • pbfile目录下创建文/定义文件product.proto

    • 文件内容如下:

      // 声明protobuf版本
      syntax = "proto3";
      // option go_package = "path;name";  path 表示生成的go文件的存放地址,会自动生成目录
      // name表示生成的go文件所属的包名
      option go_package = "../pb";
      package pb;
      // 请求体
      message ProductRequest {
          int32 prod_id = 1;
      }
      // 响应体
      message ProductResponse {
          int32 prod_stock =1;
      }
      // 定义服务体
      service ProductService {
          // 定义方法
          rpc GetProductStock(ProductRequest) returns (ProductResponse) {}
      }
      
  3. 在控制台生成pb文件夹,文件夹中.pb.go_grpc.pb.go文件

    • 切换到pbfile目录下:cd pbfile(demo链接在博客头部,此事例按照demo上面显示的进行讲解)
    • 需要执行命令:protoc --go_out=./ --go_grpc=./ product.proto
    • 项目下会自动生成pb文件夹和 product.pb.goproduct_grpc.pb.go 两个文件
    • 注:demo中的示例已经生成好,如有需要可删除后自行操作,重新生成
  4. 创建服务端

    • project-demo下创建service文件夹

    • service下创建product.go文件,produc.go文件实现了product.protoc定义的接口

    • product.go文件代码:

      package service
      
      import (
      	"context"
      	"projectbao/pb"
      )
      
      var ProductService = &productService{}
      
      type productService struct {
      	pb.UnimplementedProductServiceServer
      }
      
      func (p *productService) GetProductStock(context context.Context, request *pb.ProductRequest) (*pb.ProductResponse, error) {
      	stock := p.GetStockById(request.ProdId)
      	return &pb.ProductResponse{ProdStock: stock}, nil
      }
      
      func (p *productService) GetStockById(id int32) int32 {
      	return id
      }
      
    • project-demo下创建grpc_server.go文件,注册/创建grpc服务

    • grpc_server.go文件代码:

      package main
      
      import (
      	"fmt"
      	"log"
      	"net"
      	"projectbao/pb"
      	"projectbao/service"
      
      	"google.golang.org/grpc"
      )
      
      func main() {
      	rpcServer := grpc.NewServer()
      	pb.RegisterProductServiceServer(rpcServer, service.ProductService)
      	listion, err := net.Listen("tcp", ":8002")
      	if err != nil {
      		log.Fatal("启动监听出错", err)
      	}
      	err = rpcServer.Serve(listion)
      	if err != nil {
      		log.Fatal("启动服务器出错", err)
      	}
      	fmt.Println("启动grpc服务端成功")
      }
      
  5. 创建客户端

    • project

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go中的有限状态机FSM的详细介绍 下一篇go-zero docker-compose 搭建课件..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目