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方法。这个对象也是虚基类,需要我们自己重写)
到处为止,提供服务方的接口代码已经完成,具体调用由框架来关心,什么时候调用,什么时候响应对方,这些都是框架的事情,与业务无关。