【Go<—>Java】gRPC测试注意事项
在做go和Java之间gRPC调用之前需要完成以下两项工作:
- go语言版本的gRPC调用,实现server端和client端
- Java语言版本的gRPC调用,实现server端和client端
由于gRPC是跨语言的通信协议,所以我们可以相互调用,有以下2种调用方式:
- go程序作为server端,Java程序作为client端
- Java程序作为server端,go程序作为client端
还是拿之前写的一个student.proto文件为例
step1.student.proto文件定义
syntax="proto3";
option go_package="./;student"; //关于最后生成的go文件是处在哪个目录哪个包中,.代表在当前目录生成,student代表了生成的go文件的包名是studentoption java_multiple_files = true; //表示下面的message需要编译成多个java文件
option java_package = "grpc.student"; //指定该proto文件编译成的java源文件的包名
option java_outer_classname = "StudentProto"; // 表示下面的message编译成的java类文件的名字package student; // 定义作用域service DemoService {rpc Sender(StudentRequest) returns (StudentResponse){}
}message StudentRequest {string Id = 1;
}message StudentResponse {bytes result =1;
}message Student {int64 Id = 1;string Name =2;string No =3;
}
step2.生成各自的代码程序
这里不详细写生成过程了,之前写了两篇文章可参考:
1.Java生成gRPC程序:【JAVA】Maven构建java-grpc-protobuf代码生成测试-CSDN博客
2.Go生成gRPC程序:【GO】protobuf在golang中的测试用例-CSDN博客
step3.接口调用测试
选择以下两种方式都可以测试
- go程序作为server端,Java程序作为client端
- Java程序作为server端,go程序作为client端
根据接口定义调用Sender方法时发现一个问题
UNIMPLEMENTED: unknown service student.DemoService
经过排查发现go程序里的student.proto没有定义package ,而Java程序里的student.proto有package定义。修改保持student.proto文件一致,即我文章开始贴的proto文件即可,测试通过。
测试过程简单描述如下:
- go程序作为server端,Java程序作为client端
启动go rpc server,运行Java rpc client 调用Sender接口测试
- Java程序作为server端,go程序作为client端
启动Java rpc server,运行go rpc client 调用Sender接口测试
通过查阅资料proto文件定义需要满足以下要求:
1.package 必须一致,package限制说明你所定义的接口属于那个作用域下的。
例如student.proto文件定义package student,也就是DemoService Sender接口属于student作用域下,如果go或者java或者其他语言定义的package不相同是无法相互调用的,就是报错类似:UNIMPLEMENTED: unknown service student.DemoService
package student; // 定义作用域
生成go程序和Java程序会发现程序里有所对应代码指定
go程序:student_grpc.pb.go文件里定义常量如下
const (DemoService_Sender_FullMethodName = "/student.DemoService/Sender"
)
Java程序:
public class DemoServiceGrpc {private DemoServiceGrpc() {}public static final String SERVICE_NAME = "student.DemoService";.....}
2.接口名称和方法名称定义签名必须一致,需要维护一套proto文件即可解决此类问题。
3.proto文件编写注意事项,可参考
protobuf一些注意事项_proto [packed = true]-CSDN博客
.proto 文件中 import 其他 .proto 文件时的注意事项_proto可以import远程proto-CSDN博客
相关文章:
【Go<—>Java】gRPC测试注意事项
在做go和Java之间gRPC调用之前需要完成以下两项工作: go语言版本的gRPC调用,实现server端和client端Java语言版本的gRPC调用,实现server端和client端 由于gRPC是跨语言的通信协议,所以我们可以相互调用,有以下2种调用…...
java面试题整合
1.Java数据类型 ✅ Java是一种静态类型语言,它具有丰富的数据类型用于声明变量和方法返回类型。Java中的数据类型分为两类:原始数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 原…...
2023年12月7日:QT实现登陆界面
#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口设置this->resize(600,500);//重新设置窗口大小this->setWindowTitle("QQ-盗版");//设置窗口名为QQ-盗版this->setWindowIcon(QIcon("D:\\Qt\\funny\\pi…...
常用的测试用例大全
登录、添加、删除、查询模块是我们经常遇到的,这些模块的测试点该如何考虑 1)登录 ① 用户名和密码都符合要求(格式上的要求) ② 用户名和密码都不符合要求(格式上的要求) ③ 用户名符合要求,密码不符合要求(格式上的要求) ④ 密码符合要求…...
《python每天一小段》--12 数据可视化《1》
欢迎阅读《Python每天一小段》系列!在本篇中,将使用Python Matplotlib实现数据可视化的简单图形。 文章目录 一、概念(1)安装matplotlib(2)数据可视化实现步骤 二、绘制简单的折线图(1ÿ…...
分类预测 | Matlab实现HPO-GRU【23年新算法】基于猎食者优化算法优化门控循环单元的数据分类预测
分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.HPO-GRU【23年新算法】基于猎食者优化算法优…...
【Pytorch】学习记录分享2——Tensor基础,数据类型,及其多种创建方式
pytorch 官方文档 Tensor基础,数据类型,及其多种创建方式 1. 创建 Creating Tensor: 标量、向量、矩阵、tensor2. 三种方法可以创建张量,一是通过列表(list),二是通过元组(tuple),三是通过Numpy的数组(arra…...
实验7:索引和视图定义
【实验目的】 1、了解索引和视图的含义 2、熟悉索引和视图的创建规则 3、掌握索引和视图的创建和管理 【实验设备及器材】 1、硬件:PC机; 2、软件:(1)Windows7; (2)Microsoft SQL Server 2012。 【主要内容】 索引的创建、删除、重建…...
Source Tree回滚 重置 贮藏操作
回滚提交 source tree的回滚提交: 在执行该操作时将会对history中提交的指定节点直接进行回滚,将该节点执行的提交操作撤销(如当前节点是提交文件,执行回滚提交时将会删除该文件,如果当前节点的前面的节点对该节点内容进行修改后,执行回滚提交时需要执行冲突解决),同时生成一次…...
Android13 不能静态注册的几个广播
Android13 不能静态注册的几个广播 文章目录 Android13 不能静态注册的几个广播一、不能静态注册的广播:二、静态注册无法生效的分析1、Intent.java2、其他地方声明了不能静态注册的广播3、为啥静态注册的广播无效?4、其他静态注册无法生效的广播5、其他Android fra…...
吴恩达深度学习L2W1作业1
初始化 欢迎来到“改善深度神经网络”的第一项作业。 训练神经网络需要指定权重的初始值,而一个好的初始化方法将有助于网络学习。 如果你完成了本系列的上一课程,则可能已经按照我们的说明完成了权重初始化。但是,如何为新的神经网络选择…...
uniapp原生插件之安卓app添加到其他应用打开原生插件
插件介绍 安卓app添加到其他应用打开原生插件,接收分享的文本和文件,支持获取和清空剪切板内容 插件地址 安卓app添加到其他应用打开原生插件,支持获取剪切板内容 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 详细使用文档 u…...
scala编码
1、Scala高级语言 Scala简介 Scala是一门类Java的多范式语言,它整合了面向对象编程和函数式编程的最佳特性。具体来讲Scala运行于Java虚拟机(JVM)之上,井且兼容现有的Java程序,同样具有跨平台、可移植性好、方便的垃圾回收等特性…...
智慧路灯杆如何实现雪天道路安全监测
随着北方区域连续发生暴雪、寒潮、大风等气象变化,北方多地产生暴雪和低温雨雪冰冻灾害风险,冬季雨雪天气深度影响人们出行生活,也持续增加道路交通风险。 智慧路灯杆是现代城市不可或缺的智能基础设施,凭借搭载智慧照明、环境监测…...
C语言指针基础题(二)
目录 例题一题目解析及答案 例题二题目解析及答案 例题三题目解析及答案 例题四题目解析及答案 例题五题目解析及答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸…...
物奇平台MIC配置与音频通路关系
物奇平台MIC配置与音频通路关系 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 1 255代表无效&am…...
外包干了3年,技术退步太明显了。。。。。
先说一下自己的情况,本科生生,18年通过校招进入武汉某软件公司,干了差不多3年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能…...
阶段十-java新特性
JDK9新特性 1.模块化系统 jar包结构的变化 jar -》model -》package -》class 通过不同的模块进行开发 每个模块都有自己的模块配置文件module-info.java 2.JShell JDK9自带的命令行开发,在进行简单的代码调试时可以直接编译使用 可以定义变量,方法&…...
win10重装系统历程
win10系统更新出问题了,重置系统卡死,遂决定重装。 微软官方工具制作U盘启动盘, 进行到分区时,一冲动把盘都格式化了, 后面了解到,即便进不了系统也有办法备份数据的... 进行到安装时,提示W…...
【知识积累】深度度量学习综述
原文指路:https://hav4ik.github.io/articles/deep-metric-learning-survey Problem Setting of Supervised Metric Learning 深度度量学习是一组旨在衡量数据样本之间相似性的技术。 Contrastive Approaches 对比方法的主要思想是设计一个损失函数,直…...
基于SpringBoot+Vue的旅游景点攻略与门票预订系统毕业设计
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot与Vue框架的旅游景点攻略与门票预订系统以解决传统旅游信息管理中存在的数据孤岛现象服务响应滞后问题以及用户体验单一化等核…...
【大模型知识增强】KnowLM实战:从文本到知识图谱的自动化构建与精准管理
1. 为什么需要KnowLM这样的知识增强大模型? 最近在处理公司积累的几万份技术文档时,我深刻体会到了传统信息抽取方法的局限性。用通用大模型直接处理专业领域文本,经常会出现实体识别错误、关系张冠李戴的情况。比如把"Transformer架构&…...
生物 --- 免疫力
1、免疫的概念免疫是人体的一种生理功能。识别“自己”和“非己”。破坏和排斥进入人体内的抗原物质,如病原体。指机体识别和清除外来入侵抗原及体内突变或衰老细胞,并维持自身内环境稳定的生理功能。2、免疫系统的构成免疫系统主要由免疫器官、免疫细胞…...
别再只用人体红外了!聊聊24.125GHz微波模块在智能家居中的另类玩法与局限
24.125GHz微波传感模块的智能家居创新应用与工程实践 在智能家居领域,人体感应技术早已从简单的红外探测走向多传感器融合时代。当大多数开发者还在依赖传统PIR红外传感器时,一种成本仅20元左右的24.125GHz微波模块正在小众硬件圈引发讨论。这种原本用于…...
JavaFX程序打包exe的两种实战方案对比:exe4j vs jlink+launch4j(含体积优化技巧)
JavaFX程序打包exe的两种实战方案对比:exe4j vs jlinklaunch4j(含体积优化技巧) 对于JavaFX开发者而言,将精心开发的程序打包成可执行的exe文件是产品交付的关键一步。面对市面上多种打包工具和方案,如何选择最适合自己…...
气候模型结果难解读?NotebookLM因果推理模块深度拆解(附GFDL-ESM4输出可复现分析链)
更多请点击: https://kaifayun.com 第一章:NotebookLM气候研究辅助 NotebookLM 是 Google 推出的基于 AI 的研究协作者,专为处理长文档、技术报告与多源数据而设计。在气候科学研究中,它可快速解析 IPCC 报告、CMIP6 模型输出摘要…...
开发者必备:极简CLI工具高效管理个人代码片段库
1. 项目概述:一个面向开发者的代码片段管理工具最近在整理自己的开发环境,发现一个挺普遍的问题:那些临时写出来、解决了某个具体问题、但又不够格放进正式项目库的代码片段,到底该放哪儿?它们就像散落在硬盘各处的“知…...
云端IDE开发CircuitPython:VS Code EDU实战指南与工具链解析
1. 项目概述:当CircuitPython遇上云端IDE如果你玩过像Adafruit的Metro M4、Raspberry Pi Pico这类微控制器板子,对CircuitPython一定不陌生。它让硬件编程变得像写Python脚本一样简单,code.py一保存,板子上的LED立马就能闪起来。但…...
电脑自动干活不是梦|OpenClaw小龙虾本地AI智能体Windows部署详细步骤
核心亮点:零代码门槛|全程可视化|无需手动配环境|内置所有依赖|28 万 Tokens 额度 下载地址:OpenClaw Windows 一键部署包 v2.7.5 文章标签:#OpenClaw #小龙虾 AI #本地 AI 智能体 #Windows 一键…...
2026届最火的降重复率工具横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作范畴之内,维普降AI已然变成众多学者以及毕业生所聚焦关注的重点。伴随…...
