1. 数据传输基本原理

2. grpc环境安装

  • 代码生成器
  1. go get -u github.com/golang/protobuf/protoc-gen-go
  2. // 会自动在 $GOPATH/bin 目录下生成 protoc-gen-go 可执行二进制文件
  3. // 需要设置GOPATH环境变量,并且将 $GOPATH/bin 添加到系统或当前用户的环境变量PATH中
  • grpc框架
  1. go get -u google.golang.org/grpc
  • Proto buffer 文件编译器
  1. 1. 下载地址: https://github.com/protocolbuffers/protobuf/releases
  2. 2. 下载编译器 protoc
  3. 3. 将编译器放在 $GOPATH/bin/目录下
  4. 4. $GOPATH/bin/目录添加到系统或当前用户环境变量 PATH
  5. # protoc编译器会依据proto文件生成对应语言的代码

3. Demo

  • 编写 proto buffer文件
  1. syntax = "proto3"; // 声明当前使用的是proto3语法
  2. option go_package = "service/"; // option --选项,指明依据当前proto文件生成的go代码放到哪个包下
  3. // 定义rpc消息结构 -- 请求
  4. message ProductRequest {
  5. int64 product_id = 1;
  6. }
  7. // 定义rcp消息结构 -- 响应
  8. message ProductResponse {
  9. int64 product_store = 1; // 字段类型 字段名 字段值在二进制数据中的排序位置
  10. }
  • 使用 protoc编译 proto文件,生成Go代码
  1. protoc --go_out=service proto/hai.proto
  2. // --go_out 指定生成go代码保存的目录位置,最后一个参数是proto文件
  3. // 会生成一个 *.pb.go 文件
  1. grpc服务端与客户端
  • 定义 proto buffer文件
  1. syntax = "proto3";
  2. option go_package = "service/";
  3. message ProductRequest {
  4. int64 product_id = 1;
  5. }
  6. message ProductResponse {
  7. int64 product_store = 1;
  8. }
  9. // 定义一个产品服务
  10. service ProductService {
  11. // GetProductStoreNums 获取商品库存
  12. rpc GetProductStoreNums (ProductRequest) returns (ProductResponse);
  13. }
  • Protoc 编译 proto文件
  1. protoc --go_out=plugins=grpc:. .\proto\shop.proto
  2. // 指定插件 plugins=grpc
  3. // 冒号后面是生成Go代码的保存目录
  4. // 生成代码之后,需执行 go mod tidy 安装依赖
  • 创建grpc服务端\
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "google.golang.org/grpc"
  6. "learn-go-project/service"
  7. "log"
  8. "net"
  9. )
  10. // ImplementProductService 定义产品服务实现类
  11. type ImplementProductService struct {
  12. }
  13. // GetProductStoreNums 实现 proto buffer文件中service 定义的rpc方法 ==> 实现 pb文件中 rpc方法生成的接口
  14. func (s *ImplementProductService) GetProductStoreNums(ctx context.Context, in *service.ProductRequest) (*service.ProductResponse, error) {
  15. fmt.Println(in.GetProductId())
  16. return &service.ProductResponse{ProductStore: 20}, nil
  17. }
  18. func main() {
  19. // 1. 声明一个grpc服务
  20. grpcService := grpc.NewServer()
  21. // 2. 将实现类注册到生成的pd文件中
  22. service.RegisterProductServiceServer(grpcService, &ImplementProductService{})
  23. // 3. 启动tcp服务
  24. l, err := net.Listen("tcp", "0.0.0.0:9999")
  25. if err != nil {
  26. log.Fatalln(err)
  27. }
  28. // 3. 让grp去处理tcp连接
  29. err = grpcService.Serve(l)
  30. if err != nil {
  31. log.Fatalln(err)
  32. }
  33. }
  • 创建grpc客户端
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "google.golang.org/grpc"
  6. "learn-go-project/service"
  7. "log"
  8. )
  9. func main() {
  10. // 1. 创建grpc客户端连接
  11. conn, err := grpc.Dial(":9999", grpc.WithInsecure())
  12. if err != nil {
  13. log.Fatalln(err)
  14. }
  15. defer conn.Close()
  16. // 2. 创建对应服务的连接
  17. cli := service.NewProductServiceClient(conn)
  18. // 3. 调用方法,获取响应体
  19. response, err := cli.GetProductStoreNums(context.Background(), &service.ProductRequest{ProductId: 50})
  20. if err != nil {
  21. log.Fatalln(err)
  22. }
  23. fmt.Println(response.ProductStore)
  24. }

grpc-环境与示例的更多相关文章

  1. go的grpc环境源码编译安装

    go的grpc环境安装 参考grpc-go官方文档:https://grpc.io/docs/languages/go/quickstart/ 视频教程:https://www.bilibili.co ...

  2. go语言的grpc环境安装

    本文直接用安装包的方式安装. 源码编译安装参考:https://www.cnblogs.com/abc36725612/p/14288333.html 环境 golang的docker image d ...

  3. python的grpc环境安装

    环境 ubuntu:bionic的docker image docker run -it ubuntu:bionic python的grpc环境安装 参考grpc官网:https://grpc.io/ ...

  4. 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录

    目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 StdPeriphLi ...

  5. Nginx宣布正式支持gRPC,附示例代码

    原创 2018-03-20 薛命灯 聊聊架构 作者|Owen Garrett编辑|薛命灯 NGINX 官方博客正式宣布 NGINX 支持原生的 gPRC,现在就可以从代码仓库拉取快照版本.该特性将会被 ...

  6. Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例

    1    基本信息 1.1     软件信息 hadoop-2.6.0 zookeeper-3.4.6 hbase-0.98.9-hadoop2 (以下示例中使用的操作系统是Centos 6.5,请将 ...

  7. C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)

    一.开发环境 ReadHat6.3 32位.mysql5.6.15.gcc4.4.6 二.编译 gcc -I/usr/include/mysql -L/usr/lib -lmysqlclient ma ...

  8. go 版本 gRPC 环境搭建(3.0正式版)

    之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下:   安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...

  9. jenkins(一)集成环境搭建示例

    一.环境准备 1.安装java环境 测试自己机器是否已安装,在dos上运行java-version ,出现如下类似结果表示安装完成 2.安装Git/svn git具体配置见我的博客 “GitHub使用 ...

  10. SSH框架总结(帧分析+环境结构+示例源代码下载)

    首先,SSH不是一个框架.而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

随机推荐

  1. Python——第二章:替换和切割

    strip() 用法: .strip() 是字符串方法之一,在 Python 中用于移除字符串开头和结尾的空白字符(包括空格.制表符 \t.换行符\n等).这个方法返回一个新的字符串,原始字符串本身不 ...

  2. android学习笔记(1)

    Android 开发框架 android系统是一个开放且体积庞大的系统,从功能上,将android开发分为移植开发移动电话系统,android应用开发和android系统开发三种. 移动移植移动电话系 ...

  3. windows server 2019 IIS网站属性上没有asp.net标签 ,aspnet_regiis -i 不能安装用命令解决

    用如下命令安装: dism /online /enable-feature /featurename:IIS-ASPNET45 /all

  4. P9344 去年天气旧亭台 代码

    不带滚动数组代码: #include <iostream> #include <cstdio> #include <cstring> #define int lon ...

  5. Mysql在sql中截取时间类型字段的年月日和时间

    DATE_FORMAT() 函数 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式.我们使用 NOW() 来获得当 ...

  6. GDAL从二进制数据流中构造数据集

    目录 1. 概述 2. 实现 1. 概述 参看<从二进制数据流中构造GDAL可以读取的图像数据>这篇文章.这个问题的内涵在于,处理图像时都会将其读取成宽X高X波段的三维数组的内存Buffe ...

  7. 浅析华为云基于HBase MTTR上的优化实践

    摘要:主要介绍华为云在HBase 2.x内核所做的一些MTTR优化实践. 本文分享自华为云社区<华为云在HBase MTTR上的优化实践>,作者: 搬砖小能手. 随着HBase在华为云的广 ...

  8. [ERROR] Error executing Maven. [ERROR] 1 problem was encountered while building the effective settings

    原因: maven 的配置文件 setting.xml 有错. 比如在配置文件中多了一行: 导致配置文件的格式不正确.

  9. Hive查看,删除分区

    查看所有分区 show partitions 表名; 删除一般会有两种方案 1.直接删除hdfs文件 亲测删除hdfs路径后 查看分区还是能看到此分区 可能会引起其他问题 此方法不建议 2. 使用删除 ...

  10. 接通率维持 66% 以上,为什么火山引擎 VeDI 能让企业智能外呼不再难?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 智能机器人在企业级市场的应用更加深入了. 随着人工智能技术的进一步发展,包括智能外呼.财务审核.自助客服等在内的智 ...