分布式项目学习笔记(二):本地服务发布成RPC服务

本文介绍了如何通过创建user.proto文件并定义相应的RPC方法来搭建RPC服务。详细讲述了主机A调用接口的方式及主机B实现接口的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引言

分布式的布置决定了业务的不同功能可能放在不同的主机中。当一台主机A需要调用另一台主机B的方法时,则需要主机B提前将自己的本地服务发布成RPC服务。在这个过程中,主要需要做两件事:

  1. 主机A应该怎么调用这个接口(给出接口的使用方式)
  2. 主机B在接口里面具体实现了什么

二、具体实现

1. 主机A应该怎么调用这个接口(给出接口的使用方式)

首先需要主机B来创建一个 user.proto文件来注册本地业务的RPC方法:

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);
}

这里最关键的就是最后一段代码,它注册一个RPC方法:如果想调用我的登录方法,你就使用函数Login,参数是LoginRequest。返回是一个LoginResponse

在定义RPC服务的名称以及函数接口(函数名字+参数类型)、返回类型之后。使用指令:

protoc user.proto --cpp_out ./ 

转化为C++类型的头文件 "user.pb.h",就可以拿来使用了。

三、主机B具体实现接口里面的内容

在注册了方法之后。主机B需要具体实现接口里面的内容:

#include <iostream>
#include <string>
#include "user.pb.h"

fixbug::ResultCode* 

class UserService : public fixbug::UserServiceRpc {
publicbool Login(std::string name, std::string pwd) {
        std::cout << "doing local service login" << std::endl;
        std::cout << "name:" << name << "pwd: " << pwd << endl;
        return true;
    }

    void Login(::PROTOBUF_NAMESPACE_ID::RpcController* controller,
                       const ::fixbug::LoginRequest* request,
                       ::fixbug::LoginResponse* response,
                       ::google::protobuf::Closure* done)
    {
        // 本地重写业务
        std::string name = request->name();
        std::string pwd = request->pwd();

        bool loginResult = Login(name, pwd);  // 做本地业务

        // 把响应写入
        response->set_success(loginResult);
        fixbug::ResultCode *code = response->mutable_result();
        code->set_errcode(0);
        code->set_errmsg("");

        // 执行回调  执行响应对象的序列化和网络发送,由框架完成
        done->Run();
    } 
}

这里的具体实现是主机B继承了UserServiceRpc 来实现接口里面的内容。第一个Login其实就是本地的方法,第二个带有很多参数调用了本地的来真正执行本地的操作。里面的参数其实就是RPC框架在网络中接收到的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值