grpc-环境与示例
1. 数据传输基本原理

2. grpc环境安装
- 代码生成器
go get -u github.com/golang/protobuf/protoc-gen-go
// 会自动在 $GOPATH/bin 目录下生成 protoc-gen-go 可执行二进制文件
// 需要设置GOPATH环境变量,并且将 $GOPATH/bin 添加到系统或当前用户的环境变量PATH中
- grpc框架
go get -u google.golang.org/grpc
- Proto buffer 文件编译器
1. 下载地址: https://github.com/protocolbuffers/protobuf/releases
2. 下载编译器 protoc
3. 将编译器放在 $GOPATH/bin/目录下
4. 将$GOPATH/bin/目录添加到系统或当前用户环境变量 PATH 中
# protoc编译器会依据proto文件生成对应语言的代码
3. Demo
- 编写 proto buffer文件
syntax = "proto3"; // 声明当前使用的是proto3语法
option go_package = "service/"; // option --选项,指明依据当前proto文件生成的go代码放到哪个包下
// 定义rpc消息结构 -- 请求
message ProductRequest {
int64 product_id = 1;
}
// 定义rcp消息结构 -- 响应
message ProductResponse {
int64 product_store = 1; // 字段类型 字段名 字段值在二进制数据中的排序位置
}
- 使用 protoc编译 proto文件,生成Go代码
protoc --go_out=service proto/hai.proto
// --go_out 指定生成go代码保存的目录位置,最后一个参数是proto文件
// 会生成一个 *.pb.go 文件
- grpc服务端与客户端
- 定义 proto buffer文件
syntax = "proto3";
option go_package = "service/";
message ProductRequest {
int64 product_id = 1;
}
message ProductResponse {
int64 product_store = 1;
}
// 定义一个产品服务
service ProductService {
// GetProductStoreNums 获取商品库存
rpc GetProductStoreNums (ProductRequest) returns (ProductResponse);
}
- Protoc 编译 proto文件
protoc --go_out=plugins=grpc:. .\proto\shop.proto
// 指定插件 plugins=grpc
// 冒号后面是生成Go代码的保存目录
// 生成代码之后,需执行 go mod tidy 安装依赖
- 创建grpc服务端\
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"learn-go-project/service"
"log"
"net"
)
// ImplementProductService 定义产品服务实现类
type ImplementProductService struct {
}
// GetProductStoreNums 实现 proto buffer文件中service 定义的rpc方法 ==> 实现 pb文件中 rpc方法生成的接口
func (s *ImplementProductService) GetProductStoreNums(ctx context.Context, in *service.ProductRequest) (*service.ProductResponse, error) {
fmt.Println(in.GetProductId())
return &service.ProductResponse{ProductStore: 20}, nil
}
func main() {
// 1. 声明一个grpc服务
grpcService := grpc.NewServer()
// 2. 将实现类注册到生成的pd文件中
service.RegisterProductServiceServer(grpcService, &ImplementProductService{})
// 3. 启动tcp服务
l, err := net.Listen("tcp", "0.0.0.0:9999")
if err != nil {
log.Fatalln(err)
}
// 3. 让grp去处理tcp连接
err = grpcService.Serve(l)
if err != nil {
log.Fatalln(err)
}
}
- 创建grpc客户端
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"learn-go-project/service"
"log"
)
func main() {
// 1. 创建grpc客户端连接
conn, err := grpc.Dial(":9999", grpc.WithInsecure())
if err != nil {
log.Fatalln(err)
}
defer conn.Close()
// 2. 创建对应服务的连接
cli := service.NewProductServiceClient(conn)
// 3. 调用方法,获取响应体
response, err := cli.GetProductStoreNums(context.Background(), &service.ProductRequest{ProductId: 50})
if err != nil {
log.Fatalln(err)
}
fmt.Println(response.ProductStore)
}
grpc-环境与示例的更多相关文章
- go的grpc环境源码编译安装
go的grpc环境安装 参考grpc-go官方文档:https://grpc.io/docs/languages/go/quickstart/ 视频教程:https://www.bilibili.co ...
- go语言的grpc环境安装
本文直接用安装包的方式安装. 源码编译安装参考:https://www.cnblogs.com/abc36725612/p/14288333.html 环境 golang的docker image d ...
- python的grpc环境安装
环境 ubuntu:bionic的docker image docker run -it ubuntu:bionic python的grpc环境安装 参考grpc官网:https://grpc.io/ ...
- 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录
目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 StdPeriphLi ...
- Nginx宣布正式支持gRPC,附示例代码
原创 2018-03-20 薛命灯 聊聊架构 作者|Owen Garrett编辑|薛命灯 NGINX 官方博客正式宣布 NGINX 支持原生的 gPRC,现在就可以从代码仓库拉取快照版本.该特性将会被 ...
- 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,请将 ...
- C连接MySQL数据库开发之Linux环境完整示例演示(增、删、改、查)
一.开发环境 ReadHat6.3 32位.mysql5.6.15.gcc4.4.6 二.编译 gcc -I/usr/include/mysql -L/usr/lib -lmysqlclient ma ...
- go 版本 gRPC 环境搭建(3.0正式版)
之前装过 gRPC 的各个测试版本,有些残余的文件,正式版的安装和之前残留的清除整理如下: 安装 go 版本的 gRPC go 的安装略过.需要 go 1.5 以上版本. $ go version ...
- jenkins(一)集成环境搭建示例
一.环境准备 1.安装java环境 测试自己机器是否已安装,在dos上运行java-version ,出现如下类似结果表示安装完成 2.安装Git/svn git具体配置见我的博客 “GitHub使用 ...
- SSH框架总结(帧分析+环境结构+示例源代码下载)
首先,SSH不是一个框架.而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...
随机推荐
- pytest框架学习-标签@pytest.mark.
标签 自定义标签(区分大小写) 可以标记测试用例,对测试用例进行分组,有利于对测试用例进行筛选. 比如:给用例打标为API,代表接口自动化的用例,打标方法为@pytest.mark.API,打标后,需 ...
- 技本功|Hive优化之建表配置参数调优(一)
简介: Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主 ...
- OpenSSL命令总结
OpenSSL命令总结 疑今者察之古,不知来者视之往. 导航 介绍 对称加密 公钥加密 信息摘要 数字证书 杂项 介绍 密码学标准和互联网协议一样,是一种大家都遵守的约定和标准,比如PKCS#1中规定 ...
- CSS3学习笔记-字体属性
在CSS3中,可以使用字体属性来控制网页中文本的样式和排版.以下是常用的字体属性: font-family 该属性用于指定网页中的文本所使用的字体.我们可以通过使用通用的字体名称,或者直接使用字体名称 ...
- PyTorch项目源码学习(2)——Tensor代码结构初步学习
PyTorch版本:1.10.0 Tensor Tensor是Pytorch项目较为重要的一部分,其中的主要功能如存储,运算由C++和CUDA实现,本文主要从前端开始探索学习Tensor的代码结构. ...
- Istio与Kubernetes:资源管理与协同解析
本文分享自华为云社区<istio资源介绍以及和kubernetes资源扭转关系>,作者:可以交个朋友. 一.istio原理 Istio的原理是拦截 Kubernetes 中创建 Pod 的 ...
- 带你了解VXLAN网络中报文的转发机制
摘要:本节以集中式VXLAN网络(手工方式建立VXLAN隧道)为例,分别介绍相同子网内.不同子网间是如何进行通信的.在了解转发机制的前提下,我们先来看下VXLAN网关有哪些种类. VXLAN二层网关与 ...
- 一文讲述G6实现流程图绘制的常用方法
摘要:G6 是一个图可视化引擎.它提供了图的绘制.布局.分析.交互.动画等图可视化的基础能力. 本文分享自华为云社区<会用这些的api,轻松绘制流程图--antv.g6流程图入门>,作者: ...
- 代码混淆工具ipaguard:如何使用ipaguard保护和混淆iOS应用程序代码
转载:怎么保护苹果手机移动应用程序ios ipa文件中的代码? 目录 转载:怎么保护苹果手机移动应用程序ios ipa文件中的代码? 代码混淆步骤 1. 选择要混淆保护的ipa文件 2. 选择要混 ...
- 开心档之MySQL 数据类型
MySQL 数据类型 MySQL 中定义数据字段的类型对你数据库的优化是非常重要的. MySQL 支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL 支持所有 ...