当前位置: 首页 > news >正文

RPC-grpc实践

参考:https://developer.aliyun.com/article/1152352?spm=a2c6h.12873639.article-detail.33.344f6446zEnbRi&scm=20140722.ID_community@@article@@1152352._.ID_community@@article@@1152352-OR_rec-V_1

参考:https://onejson.blog.csdn.net/article/details/90294238?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-90294238-blog-89449117.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-90294238-blog-89449117.pc_relevant_recovery_v2&utm_relevant_index=3

实践

  • 安装grpc
    • 两种方式
      • brew install protobuf
      • go get -u google.golang.org/grpc
    • 是否安装成功
      • protoc --version
  • 编写文件idl
syntax = "proto3";option go_package = "./;MyGRPCService";
package proto;message MyRequest {string reqMessage = 1;
}message MyResponse {string respMessage = 1;
}service MyService{rpc MyQuery(MyRequest) returns (MyResponse);
}
  • 生成文件服务端、客户端文件
    • 服务文件(服务类、函数)
      • protoc --go-grpc_out=. service.proto3
    • 参数文件(参数的结构)
      • protoc --go_out=. service.proto3
    • 需要提前安装go协议编译器插件(就是代码生成的命令工具)
      • protoc–go-grpc_out
      • protoc–go_out
  • 编写服务端程序
    • 依赖文件
      • protoc --go-grpc_out=./MyGRPCService --go_out=./MyGRPCService ../grpc_test/service.proto3 -I ../grpc_test
      • 注意包和文件名
      • -I参考
        • :https://www.tsingfun.com/it/opensource/file-does-not-reside-within-any-path-specified-using-proto-path.html
        • 指定文件路径
package mainimport ("context""fmt""google.golang.org/grpc""grpc_server/MyGRPCService""net""os""strconv"
)type RpcService struct {MyGRPCService.UnimplementedMyServiceServer
}func (r *RpcService) MyQuery(ctx context.Context, req *MyGRPCService.MyRequest) (resp *MyGRPCService.MyResponse, err error) {resp = &MyGRPCService.MyResponse{}resp.RespMessage = strconv.Itoa(len(req.ReqMessage))return
}func main() {server := grpc.NewServer()MyGRPCService.RegisterMyServiceServer(server, &RpcService{})lis, err := net.Listen("tcp", ":9003")if err != nil {fmt.Println("err : ", err)os.Exit(1)}fmt.Println("servicing....")err = server.Serve(lis)if err != nil {fmt.Println("err : ", err)os.Exit(1)}
}
  • 编写客户端代码
    • 依赖文件
      • protoc --go-grpc_out=./MyGRPCService --go_out=./MyGRPCService ../grpc_test/service.proto3 -I ../grpc_test
      • 就是可以在客户端程序中直接使用的结构体文件
package mainimport ("context""fmt""google.golang.org/grpc""grpc_client/MyGRPCService""os"
)func main() {conn, err := grpc.Dial(":9003", grpc.WithInsecure()) //没有IP,默认本机if err != nil {fmt.Println("err:", err)os.Exit(1)}defer conn.Close()client := MyGRPCService.NewMyServiceClient(conn)res, err := client.MyQuery(context.Background(), &MyGRPCService.MyRequest{ReqMessage: "husdghdsg",})if err != nil {fmt.Println("err:", err)os.Exit(1)}fmt.Println(res)}

问题

protoc --go-grpc_out=. service.proto3报错
protoc-gen-go-grpc: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.
  • 没有安装编译器
  • 解决
    • go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
      • go install之后,命令不生效是因为系统找不到执行文件
      • go install安装的可执行文件在GOPATH的bin目录下
        • gopath查看:go env
        • 参考:http://c.biancheng.net/view/122.html
    • 修改path
      • 将gopath添加到.zshrc文件中
      • 参考:https://skyao.io/learning-go/develop/install/
        • vim ~/.zshrc
        • export PATH=“/Users/didi/go/bin:$PATH”
goland支持.proto3文件

参考:https://blog.csdn.net/taoerchun/article/details/103554739

  • 在设置-> 插件中搜索protocol
  • 安装protocol buf插件
  • 在设置->file type中配置关联关系

相关文章:

RPC-grpc实践

参考:https://developer.aliyun.com/article/1152352?spma2c6h.12873639.article-detail.33.344f6446zEnbRi&scm20140722.ID_communityarticle1152352._.ID_communityarticle1152352-OR_rec-V_1 参考:https://onejson.blog.csdn.net/article/detai…...

JavaEE——MyBatis配置文件的详细介绍

简单介绍: 需要我们编写的配置文件主要有三个,分别是核心配置文件(mybatis-config.xml),数据库连接信息文件(db.properties),SQL语句映射文件(Mappers)&…...

bwmarrin/snowflake生成ID重复问题排查记录

现象 某日,运营反馈,在某个时间区间丢失了一段日志,让看看是什么问题。 排查 查看项目日志有无错误 发现项目日志有报错信息Error 1062 Duplicate entry 149059529550598144 for key PRIMARY,很显然,问题在此,数据库…...

操作系统题目收录(十)

1、在存储管理中,采用覆盖与交换技术的目的是()。 A:节省主存空间B:物理上扩充主存容量C:提高CPU效率D:实现主存共享 解析 覆盖和交换的提出就是为了解决主存空间不足的问题,但不…...

IOS 自动化测试环境搭建

购买MacPDD 比TB JD 便宜500,下单安装homebrew/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"安装npm cnpmbrew install node; npm install -g cnpm --registryhttps://registry.npm.taobao.org;安装类似Andro…...

系统设计原则

系统设计原则 好的系统是迭代出来的。先解决核心问题,预测未来可能出现的问题,对现有的问题有方案,对未来的问题有预案。不是一上来就按1亿用户量设计,也不要过度复杂化系统。 业务千变万化,技术层出不穷&#xff0c…...

推荐130个网站,非常实用,比涨工资都重要

搞学习 TED(最优质的演讲):https://www.ted.com/ 谷粉学术:https://gfsoso.99lb.net/scholar.html 大学资源网:http://www.dxzy163.com/ 简答题:http://www.jiandati.com/ 网易公开课:https…...

手机棋牌游戏开发的流程是怎样的?

最近几年,随着网络游戏的兴起,棋牌手游开发也越来越受欢迎,在国内,几乎随处可见从事手游和手游的公司。不过,虽然公司和产品很多,但效果也不一样,区别就在于,他们能不能掌握好这款游…...

浅谈C++函数重载

C相较于C语言来说,重载是一重大特性,让我们一起简单的回顾一下重载那些事 传送门函数重载是什么为什么有函数重载函数重载是如何实现的总结函数重载是什么 函数重载:是函数的一种特殊情况,C允许在同一作用域中声明几个功能相似的同名函数 这些同名函数的形参列表(参数个数or类…...

数据分析spss应急考试

数据分析spss应急考试 前言 单项选择 15(项)*2(分)30 判断题 10*1 10 计算题 2*10 案例分析题目(考实验内容) 总四十分,分值不等 老师重点强调了回归分析因子分析方差分析参数、非参数检验 2独立样本的非参数检验应该用什么方法多独立样本…...

Handler postDelayed的实现原理

Handler postDelayed的实现原理 问题描述 Handler.postDelayed()的原理是如何保证延时执行的? 扩展:这样实现的好处是什么? 题目分析 猜测一下 以我们对Handler的了解,内部使用了Looper对消息队列进行循环获取执行&#xff0…...

【数据结构】平衡二叉树

目录 一、平衡二叉树的介绍 二、平衡二叉树的插入 1、平衡二叉树的插入步骤 2、平衡二叉树的旋转 2.1左单旋 2.2右单旋 2.3左右双旋 2.4右左双旋 三、平衡二叉树的删除(略) 四、个人对平衡二叉树见解 五、平衡二叉树整体代码 一、平衡二叉树的…...

Minecraft服务端配置

✨✨前言 ✨✨ 我的世界大家肯定都不陌生,在网易拿下中国区的代理后,很多小伙伴也是都转向了网易版我的世界,网易版我的世界可以说已经做是的十分全面了,使用起来也十分方便,一部分小伙伴也是看重了网易庞大的玩家数量…...

yunUI组件库解析:图片上传与排序组件yImgPro

yunUI是笔者开源的微信小程序功能库。目前其中包含了一些复杂的功能组件。方便使用。未来它将分为组件、样式、js三者合为一体,但分别提供。 本文所用代码皆来源于组件库中的yImgPro组件。详细代码可至github查看。地址: yunUI 。 npm地址:yu…...

Java基础:回调函数

因为在看Android代码的时候发现了许多关于回调函数的知识, 所以去了解了一下. 对于我来说不太好懂, 因为我觉得看的那些博文的讲法对我来说很绕, 所以我在理解了之后想写一篇关于回调函数的博文来给和我一样理解能力稍差的人一点帮助. 回调函数的作用其实就是将需要这个功能的调…...

Springboot多环境配置

此文章是根据黑马程序员课程所做的笔记课程视频 多环境开发 ​ 什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼顾3种环境设置,开发环境——自己用的…...

Java Number Math 类,超详细整理,适合新手入门

目录 一、什么是Java Number类? 二、Java Number类提供了哪些基本的数字操作? 三、什么是包装类? 所有的包装类都是抽象类 Number 的子类。 四、什么是Java Math 类 Test类案例:(Math.PI 表示一个圆的周长与直径…...

俯瞰·明统系列·落霞与孤鹜齐飞、南征与北伐并举

尽江南百万兵,腰间宝剑血尤腥。 引言 元至正二十七年(1367年)四月,吴王朱元璋命中书右丞相徐达为征虏大将军、平章常遇春为副将军,率军25万由淮入河、北进中原(第一次北伐)。北伐中发布告北方官…...

Nodejs环境搭建和配置

Nodejs环境的搭建和配置 1、下载 官网:http://nodejs.cn/download/,选择windows64位 msi文件 2、安装和配置环境 双击安装之后,配置环境变量: ①系统变量那边创建NODE_PATH变量,值为nodejs文件夹的node_modules文…...

MybatisPlus------条件构造器Wrapper以及QueryWrapper用法(七)

MybatisPlus------条件构造器Wapper(七) Wrapper:条件构造器抽象类,最顶端父类 AbstarctWrapper:用于查询条件封装,生成sql的where条件。 QueryWrapper:查询条件封装(可以用于查询、删除&#x…...

飞书机器人深度集成:OpenClaw+Qwen3-32B-Chat智能问答系统搭建

飞书机器人深度集成:OpenClawQwen3-32B-Chat智能问答系统搭建 1. 项目背景与需求拆解 去年底接手了一个技术团队的知识库建设项目,需要为百人规模的研发团队搭建一个智能问答系统。核心诉求是:通过飞书机器人接口,让成员能快速查…...

Qwen3-32B-Chat镜像深度优化:OpenClaw任务执行效率提升30%

Qwen3-32B-Chat镜像深度优化:OpenClaw任务执行效率提升30% 1. 为什么需要深度优化? 去年冬天,当我第一次在本地部署OpenClaw对接Qwen3-32B模型时,遇到了一个尴尬的问题:一个简单的"截图识别鼠标点击"任务链…...

小白也能学会:Qwen3-ForcedAligner字幕生成,操作简单效果专业

小白也能学会:Qwen3-ForcedAligner字幕生成,操作简单效果专业 1. 为什么你需要这个字幕生成工具? 视频创作者和内容生产者经常面临一个共同难题:如何高效地为视频添加精准的字幕。传统手动添加字幕不仅耗时费力,而且…...

RPA-Python与pytest-xdoctest集成:Xdoctest测试自动化

RPA-Python与pytest-xdoctest集成:Xdoctest测试自动化 【免费下载链接】RPA-Python Python package for doing RPA 项目地址: https://gitcode.com/gh_mirrors/rp/RPA-Python RPA-Python是一款功能强大的Python自动化库,而pytest-xdoctest则是一个…...

5分钟搞定OpenClaw+百川2-13B:星图平台镜像一键部署指南

5分钟搞定OpenClaw百川2-13B:星图平台镜像一键部署指南 1. 为什么选择云端沙盒体验OpenClaw 上周我在本地尝试部署OpenClaw时,经历了长达3小时的依赖冲突和配置报错。当最终看到"openclaw gateway started"的提示时,我的开发环境…...

C++ vs .NET 数组原地反转实测:小数组 C++ 碾压,大数组 .NET

C vs .NET 数组原地反转实测:小数组 C 碾压,大数组 .NET 反杀? 前几天看到一篇文章:《将一个序列反序,在C与C#下性能比较》(链接大家可以自行搜索)。作者对比了 C# 的“托管/非托管”实现和 C 的…...

从八股到实战!3月25日Python高并发面试,TaskGroup+JIT双杀通关

面试官推了推眼镜,盯着你的简历:“说说Python高并发吧,asyncio用过吗?” 你心里冷笑一声。这要是搁三年前,你肯定开始背诵:"asyncio是Python的异步IO库,使用事件循环机制,通过a…...

3个步骤让Sketch设计效率提升300%:Automate Sketch插件完全指南

3个步骤让Sketch设计效率提升300%:Automate Sketch插件完全指南 【免费下载链接】Automate-Sketch Make your workflow more efficient. 项目地址: https://gitcode.com/gh_mirrors/au/Automate-Sketch 在当今快节奏的设计工作中,效率就是竞争力。…...

cv_resnet101_face-detection_cvpr22papermogface 模型压缩与加速:面向边缘设备的部署探索

cv_resnet101_face-detection_cvpr22papermogface 模型压缩与加速:面向边缘设备的部署探索 1. 引言 想象一下,你手里有一台小巧的Jetson Nano开发板,想让它实时识别人脸,完成门禁或者客流统计。你兴冲冲地找到了一个效果不错的模…...

接口频繁变化时,Flutter 项目如何保证稳定性?

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...