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框 ...
随机推荐
- 万界星空科技仓库管理wms系统
企业在管理库存时,尤其是生产制造企业,使用传统方式比如纸笔.Excel 管理库存,由于工具和信息化存在局限,导致在管理库存时出现如下问题: 1.通过纸笔记录出入库申请,人为手动计算易出错,数据易丢 ...
- 在Linux上部署.net Core 步骤以及遇到的一些问题
Linux安装部署手册 一.安装.NET Core SDK centos 7 系统命令为: sudo rpm -Uvh https://packages.microsoft.com/config/ce ...
- 玩转Python:数据可视化,一个很高级的交互式Python库,附代码
在数据科学和分析的世界里,将数据可视化是至关重要的一步,它能帮助我们更好地理解数据,发现潜在的模式和关系.Python 提供了多种可视化工具,HvPlot 是其中一个出色的库,专为简单且高效的交互式可 ...
- Bean named ‘xxxxxx‘ is expected to be of type ‘x‘ but was actually of type ‘com.sun.proxy.$Proxy112‘
Bean named 'instanceService' is expected to be of type 'awb.operations.service.instance.InstanceServ ...
- Altas&Ranger快速入门
Altas&Ranger快速入门 一.元数据 企业内部远行多种类型的数据库,有关系型数据库.非关系型数据库.图数据库.时序数据库等,常见有mysql.redis.Mongodb.oracle. ...
- 看华为云Serverless 4大特性如何让软件架构更丝滑
摘要:Serverless可以看作是一种云计算服务模型,它允许开发者在不需要管理服务器的情况下通过事件驱动的方式运行应用代码. 软件架构的发展从原先的单体架构到近十几年的微服务架构,再到现在新兴的Se ...
- 十问ByteHouse:如何基于ClickHouse玩转向量检索?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 向量检索被广泛使用于以图搜图.内容推荐以及大模型推理等场景.随着业务升级与 AI 技术的广泛使用,用户期望处理的向 ...
- Solon2 之基础:四、应用启动过程与完整生命周期
串行的处理过程(含六个事件扩展点 + 两个函数扩展点),代码直接.没有什么模式.易明 提醒: 启动过程完成后,项目才能正常运行(启动过程中,不能把线程卡死了) AppBeanLoadEndEvent ...
- SQL Server 锁表
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran ...
- Nginx The system cannot find the path specified
Nginx -t 时报 (3: The system cannot find the path specified) 原因:路径中有文件夹是中文,Nginx 全路径,不能包含中文