基于muduo的rpc项目开发之业务模块的业务提供者

1.介绍

业务模块里面分业务提供者,业务消费者。不同角色的代码是不一样的,所以,下面将从这两个角色去介绍业务代码。

2.业务提供者

业务提供者类,我们定义为callee类,现在思考一个问题,一个本地业务方法怎么发布成RPC方法?

                                 本地方法

                                        |

                                        |------>>>框架完成完成(下面的都是业务代码,不要搞迷了)

                                        |

                                RPC方法

由上面这个图可看出来,想要完成本地方法转换成RPC方法,必须得由框架帮忙,业务不需要关心。业务只需要关心自己的业务,以及和框架的接口。

2.1本地业务代码

本地业务代码没什么好说的,就是我们正常开发那样子。比如下面这个UserService提供本地服务方法,Login和GetFriendLists方法。

/*
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 false;
    }

    bool Register(uint32_t id, std::string name, std::string pwd)
    {
        std::cout << "doing local service: Register" << std::endl;
        std::cout << "id:" << id << "name:" << name << " pwd:" << pwd << std::endl;
        return true;
    }
}

 2.2本地业务与框架的接口

要实现本地业务和框架接口匹配,只要按下面这几步步去做:

(1)在.proto文件里面定义service服务类(别忘了加option选项),以及参数和返回值类型。

(2)编译proto文件,生成相应源文件,这些源文件里面包含我们需要的类,我们写一个类继承提供者类,重写里面的函数,就可以将业务代码转变为与框架接口相关的代码。然后在框架里面调用业务类即可完成相应的业务。我们所重写的这些基类的虚函数,将由框架替我们调用,完成业务开发。proto文件的存在,可以让消费者一端知道怎么使用方法。

如果上面步骤有不会的或者不清楚的,可以看下面这篇博客

基于muduo的rpc项目开发之protobuf模块_@seven@的博客-CSDN博客

(3)上面说到需要继承的类。这个类在proto.h头文件里面可以查,和我们在.proto文件里面定义的类是一样的(消费者的是多加_stub后缀)。我们继承这个类,重写里面的纯虚函数,在重写纯虚函数的时候,加上我们上面的本地业务代码,即可完成一个接口代码,或者说是接口对象。重写虚函数的步骤按下面四步来:

        (a)获取业务参数(有效性检查)

        (b)调用本地业务方法

        (c)填写返回值的相应参数

        (d)触发或者说调用响应函数(注意:响应函数是通过对象,调用内部的run方法。这个对象也是虚基类,需要我们自己重写)

到处为止,提供服务方的接口代码已经完成,具体调用由框架来关心,什么时候调用,什么时候响应对方,这些都是框架的事情,与业务无关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值