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

使用RPC服务的步骤

 服务方

1.首先服务的发布方在proto文件里面描述发布的方法,例如发送一个注册方法。

message RegisterRequest
{uint32 id = 1;bytes name = 2;bytes pwd = 3;
}message RegisterResponse
{ResultCode result = 1;bool sucess = 2;
}service UserServiceRpc
{rpc Login(LoginRequest) returns(LoginResponse);rpc Register(RegisterRequest) returns(RegisterResponse);
}

2.之后protoc  user.proto  --cpp_out=./生成cpp文件

生成完cpp后加入到服务方的代码中,我们将服务方的类继承于service UserServiceRpc类,重写我们的register类,框架负责调用该方法。

 void Register(::google::protobuf::RpcController* controller,const ::fixbug::RegisterRequest* request,::fixbug::RegisterResponse* response,::google::protobuf::Closure* done){uint32_t id = request->id();std::string name = request->name();std::string pwd = request->pwd();bool ret = Register(id, name, pwd);response->mutable_result()->set_errcode(0);response->mutable_result()->set_errmsg("");response->set_sucess(ret);done->Run();}
};

调用方

根据proto文件里发布的方法,来写调用方的代码。

int main(int argc, char **argv)
{// 整个程序启动以后,想使用mprpc框架来享受rpc服务调用,一定需要先调用框架的初始化函数(只初始化一次)MprpcApplication::Init(argc, argv);// 演示调用远程发布的rpc方法Registerfixbug::RegisterRequest req;req.set_id(2000);req.set_name("mprpc");req.set_pwd("666666");fixbug::RegisterResponse rsp;// 以同步的方式发起rpc调用请求,等待返回结果stub.Register(nullptr, &req, &rsp, nullptr); // 一次rpc调用完成,读调用的结果if (0 == rsp.result().errcode()){std::cout << "rpc register response success:" << rsp.sucess() << std::endl;}else{std::cout << "rpc register response error : " << rsp.result().errmsg() << std::endl;}return 0;
}

这样就完成了一个服务方和调用方对rpc服务的使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python打怪练习
  • UEFI ——Firmware层级结构
  • [数据集][目标检测]轴承缺陷划痕检测数据集VOC+YOLO格式1166张1类别
  • wordpress评论ip异常问题
  • 美团面经到店研发
  • 微服务的多面手:Spring Cloud 多数据中心支持全解析
  • 使用Python+moviepy保存截取视频画面
  • javaweb_07:分层解耦
  • Java之TCP编程综合案例
  • 卷积神经网络的相关知识点
  • C++相关概念和易错语法(25)(列表初始化、initializer_list)
  • 【云原生】Prometheus Pushgateway使用详解
  • Java对象头里有哪些信息
  • 如何在linux系统上部署Redis
  • Android12修改设备名称
  • ----------
  • 【Leetcode】101. 对称二叉树
  • [译]CSS 居中(Center)方法大合集
  • [译]前端离线指南(上)
  • Android单元测试 - 几个重要问题
  • Apache Spark Streaming 使用实例
  • C++类中的特殊成员函数
  • javascript 总结(常用工具类的封装)
  • Java读取Properties文件的六种方法
  • js中的正则表达式入门
  • log4j2输出到kafka
  • Odoo domain写法及运用
  • oschina
  • Vue.js 移动端适配之 vw 解决方案
  • vue:响应原理
  • 从tcpdump抓包看TCP/IP协议
  • 给github项目添加CI badge
  • 诡异!React stopPropagation失灵
  • 技术发展面试
  • 前端面试题总结
  • 一文看透浏览器架构
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​MySQL主从复制一致性检测
  • #AngularJS#$sce.trustAsResourceUrl
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (a /b)*c的值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (k8s)Kubernetes本地存储接入
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三)mysql_MYSQL(三)
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • .DFS.
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 6.0 处理跨域的方式
  • .NET 事件模型教程(二)
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NetCore 如何动态路由
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】