本地服务怎么发布成rpc服务

目录

1.引入

2.user.proto

3.userservice.cc


1.引入

example文件夹作为我们框架项目的使用实例,在example文件夹下创建callee和caller两个文件夹

callee是RPC服务的提供者。在callee创建一个文件:userservice.cc

我们有没有这样一个框架,把这个UserService这个类生成的Login方法直接变成一个RPC远程方法?让在其他进程,其他机器都可以调用这个方法?
在这里我们使用protobuf进行参数和调用方法标识的序列化和反序列化。

2.user.proto

我们在example下再建一个文件:user.proto

syntax="proto3";package fixbug;option cc_generic_services=true;message ResultCode
{int32 errcode=1;bytes errmsg=2;
}//函数的参数类型
message LoginRequest
{bytes name=1;bytes pwd=2;
}//函数的返回值类型
message LoginResponse
{ResultCode result=1;bool success=2;
}//RPC函数的描述
service UserServiceRpc
{rpc Login(LoginRequest) returns(LoginResponse);
}

保存退出,打开终端,进入到example下,执行
protoc user.proto --cpp_out=./

我们在CMakeLists.txt配置好相应的路径。
我们在example中再创建一个CMakeLists.txt

 CMakeLists.txt配置如下:

add_subdirectory(callee)
add_subdirectory(caller)

我们在callee和caller下各自再创建一个CMakeLists.txt
在callee的CMakeLists.txt中配置如下:

set(SRC_LIST userservice.cc ../user.pb.cc)
add_executable(provider ${SRC_LIST})#可执行文件

3.userservice.cc

caller发送一个rpc请求,被rpc框架接受,rpc框架根据发送过来的请求,请求哪些方法,有哪些参数,然后匹配到Login方法,将这个请求上报过来,从请求中取到数据做本地业务(request),然后执行响应的响应(response),然后再执行一个回调(done)相当于把这个执行完的rpc方法的返回值塞给框架,由框架再给我们执行数据的序列化和反序列化。再通过框架的网络将响应返回回去(发送给caller),体现在Login的四个参数。

Closure是抽象类,需要重写Run方法。

userservice.cc代码:

#include <iostream>
#include <string>
#include "user.pb.h"/*
UserService原来是一个本地服务,提供了两个进程内的本地方法,Login和GetFriendLists
*/
class UserService:public fixbug::UserServiceRpc//使用在rpc服务发布端(rpc服务提供者)
{
public:bool Login(std::string name,std::string pwd){std::cout<<"doing local service:Login"<<std::endl;std::cout<<"name:"<<name<<" pwd:"<<pwd<<std::endl;return true;}/*重写基类UserServiceRpc的虚函数  下面这些方法都是框架直接调用的1.caller  ===>  Login(LoginRequest) =>muduo =>  callee2.callee  ===>  Login(LoginRequest) =>交到下面重写的这个Login方法上了*/void Login(::google::protobuf::RpcController *controller,const ::fixbug::LoginRequest * request,::fixbug::LoginResponse * response,::google::protobuf::Closure *done){//框架给业务上报了请求参数LoginRequest,应用获取相应数据做本地业务std::string name = request->name();std::string pwd = request->pwd();//做本地业务bool login_result=Login(name,pwd);//把响应写入  包括错误码、错误消息、返回值fixbug::ResultCode* code=response->mutable_result();code->set_errcode(0);code->set_errmsg("");response->set_success(login_result);//执行回调操作   执行响应对象数据的序列化和网络发送(都是由框架来完成的)done->Run();}
};int main()
{return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/360304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试题】MySQL数据库

目录 什么是视图&#xff0c;视图的作用是什么&#xff1f;什么是索引&#xff1f;MySQL中有哪些类型的索引&#xff1f;简述索引设计原则&#xff1f;简述索引的数据结构&#xff1f;简述Hash 和 B 树索引的区别&#xff1f;列出MySQL中导致索引失效的情况&#xff1f;简述数据…

mysql窗口函数排名查询 与 连续出现的数字查询

排名查询 学会这一个查询&#xff0c;我们应该对该类型的查询 方法就能有一个了解&#xff0c;不然 如果下次遇到该类型的查询&#xff0c;我们依然分析不出 给你一张表&#xff0c;里面有id 和score字段&#xff0c;根据score的分数大小 排序 &#xff0c;假如有相同的分数&…

【山东】2024年夏季高考文化成绩一分一段表

文末有图片版&#xff0c;可直接保存下载&#xff01;&#xff01; 2024年夏季高考文化成绩一分一段表分数段全体-选考物理-选考化学-选考生物-选考思想政治-选考历史-选考地理分数段本段人数累计人数本段人数累计人数本段人数累计人数本段人数累计人数本段人数累计人数本段人…

Upload-Labs-Linux1 使用 一句话木马

解题步骤&#xff1a; 1.新建一个php文件&#xff0c;编写内容&#xff1a; <?php eval($_REQUEST[123]) ?> 2.将编写好的php文件上传&#xff0c;但是发现被阻止&#xff0c;网站只能上传图片文件。 3.解决方法&#xff1a; 将php文件改为图片文件&#xff08;例…

毕业生离校系统

摘 要 随着信息技术的快速发展和普及&#xff0c;越来越多的高校开始利用信息化手段来提升管理和服务效率。毕业生离校是高校管理工作中的一个重要环节&#xff0c;涉及到毕业生的个人信息、学业成绩、离校手续等多个方面。传统的离校流程往往繁琐、耗时&#xff0c;且容易出现…

Apple - Framework Programming Guide

本文翻译自&#xff1a;Framework Programming Guide&#xff08;更新日期&#xff1a;2013-09-17 https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Frameworks.html#//apple_ref/doc/uid/10000183i 文章目录 一、框架编程指南简介…

永洪bi里topN的设置/用法

要实现的效果&#xff1a;实现通过输入参数&#xff0c;进行图表top的排序筛选 图示&#xff1a; 筛选前&#xff1a; 输入3&#xff0c;看top3的值&#xff1a; 输入-3&#xff0c;看倒数3个的值&#xff1a; 设置步骤&#xff1a; 1️⃣&#xff1a;添加一个“文本参数组件…

打造智能家居:用ESP32轻松实现无线控制与环境监测

ESP32是一款集成了Wi-Fi和蓝牙功能的微控制器&#xff0c;广泛应用于物联网项目。它由Espressif Systems公司开发&#xff0c;具有强大的处理能力和丰富的外设接口。下面我们将详细介绍ESP32的基础功能和引脚功能&#xff0c;并通过具体的实例项目展示其应用。 主要功能 双核处…

找不到mfc140u.dll怎么修复,mfc140u.dll丢失的多种修复方法

计算机丢失mfc140u.dll文件会导致依赖该文件的软件无法正常运行。mfc140u.dll是Microsoft Visual C 2015的可再发行组件之一&#xff0c;它属于Microsoft Foundation Class (MFC) 库&#xff0c;许多使用MFC开发的程序需要这个DLL文件来正确执行。丢失了mfc140u.dll文件。会导致…

数据结构需要每个都具体实现吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「数据结构的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;用c的stl能刷算法题是不…

水浅王八多

今天有三个被自媒体和韭菜们转疯的视频。 &#xff08;1&#xff09; 财政部公布&#xff1a;今年1-5月份证券交易印花税&#xff0c;同比去年1-5月份&#xff0c;降低50.8%。 其实是&#xff1a;2023年8月27日&#xff0c;为活跃资本市场&#xff0c;财政部、证监会和三大交易…

wondershaper 一款限制 linux 服务器网卡级别的带宽工具

文章目录 一、关于wondershaper二、文档链接三、源码下载四、限流测试五、常见报错1. /usr/local/sbin/wondershaper: line 145: tc: command not found2. Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs.. 一、关于wonder…

【银河麒麟】云平台查看内存占用与实际内存占用不一致,分析处理过程,附代码

1.需求/问题描述 发现云平台查看内存占用与实际内存占用不一致。 2.分析过程 在系统中获取虚拟机内存使用率目前主要有两种方式&#xff0c;一种是通过virsh dommemstat获取&#xff0c;另外一种是通过qga接口获取。由于之前修复界面虚拟机cpu使用率时为qga接口获取&#xff…

MCP2515汽车CAN总线支持SPI接口的控制器芯片替代型号DPC15

器件概述 DPC15是一款独立CAN控制器&#xff0c;可简化需要与CAN总线连接的应用。可以完全替代兼容MCP2515 图 1-1 简要显示了 DPC15 的结构框图。该器件主要由三个部分组成&#xff1a; 1. CAN 模块&#xff0c;包括 CAN 协议引擎、验收滤波寄存 器、验收屏蔽寄存器、发送和接…

SpringBoot2+Vue3开发博客管理系统

项目介绍 博客管理系统&#xff0c;可以帮助使用者管理自己的经验文章、学习心得、知识文章、技术文章&#xff0c;以及对文章进行分类&#xff0c;打标签等功能。便于日后的复习和回忆。 架构介绍 博客管理系统采用前后端分离模式进行开发。前端主要使用技术&#xff1a;Vu…

VBA技术资料MF165:关闭当前打开的所有工作簿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

宠物空气净化器哪家强?希喂、小米、安德迈谁最具性价比?

猫咪掉毛是一种正常的生理现象&#xff0c;每只猫咪都会周期性地更换毛发。但是&#xff0c;当您发现家里的沙发、地毯、衣物、甚至空气中都漂浮着难以清理的猫浮毛时。还是会很烦恼&#xff0c;最重要的是空气中的浮毛如果不及时清理的话长时间停留在空气中会对身体造成一定威…

2021数学建模C题目– 生产企业原材料的订购与运输

C 题——生产企业原材料的订购与运输 思路&#xff1a;该题主要是通过对供应商的供货能力和运送商的运货能力进行估计&#xff0c;给出合适的材料订购方案 程序获取 第一题问题思路与结果&#xff1a; 对 402 家供应商的供货特征进行量化分析&#xff0c;建立反映保障企业生…

Hive期末总结

hive的概念&#xff0c;谁开发的 Apache Hive 是一个Apache 软件基金会维护的开源项目 Facebook贡献 hive是一个基于hadoop的数据仓库工具&#xff08;对数据汇总查询和分析的工具&#xff09; hive执行原理 Hive通过给用户提供的一系列交互接口&#xff0c;接收到用户的指令…

IDS Gaia-X Catena-X Manufacturing-X的关系

来源&#xff1a;小盟科普丨Catena-X数据空间在汽车领域落地https://mp.weixin.qq.com/s/Ftp0UGAohsh4ltLn3DylAw