RPC接口实现

本文详细介绍了RPC(远程过程调用)的作用及其在实际开发中的实现步骤。首先通过编写Thrift文件定义数据结构和接口,接着进行语法校验和编译生成Java代码。在Service层实现接口方法,并利用对象属性复制工具进行转换。最后,在Web层调用接口,实现不同工程间的数据传输。整个过程涵盖了从接口定义到实际调用的完整流程。
摘要由CSDN通过智能技术生成

1.RPC作用

以目前的认识,RPC的作用:多个工程之间数据传输。

 

2.逐步完成RPC接口实现

 

第一步:

编写thrift文件,语法格式和java不同。

在布局分层里安排在了client层

include "base.thrift"
namespace java com.***.***.***.***.***.student

/**
 * 学生信息实体
 **/
struct StudentInfo {
    // id
    1: i64 Id,

    // 学生编码
    2: string RuleNo,

    // 学生名称
    3: string RuleName,

    // 学生类型 
    4: i32 RuleType,
}

/**
  *  班级信息
  **/
struct StudentClassVO{

    //  班级ID
    1: i64 Id,

    //  班级编码
    2: string StudentClassNo,

    //  班级名称
    3: string StudentClassName,

}


/**
 * 学生信息查询请求
 **/
 struct StudentInfoQueryRequest{

    // 学生编码
    1: string StudentNo,

    255: optional base.Base Base,
 }

/**
 * 学生信息查询响应
 **/
 struct StudentInfoQueryResponse{

    // 学生信息(唯一)
    1: StudentInfo studentInfo,

    255: base.BaseResp BaseResp,

 }


其中  struct StudentInfoQueryRequest 和  struct StudentInfoQueryResponse 是请求方法。

然后在thrift总文件中添加相关方法声明

/**
    * 根据StudentNo获取学生信息
    **/
    student_rule.StudentInfoQueryResponsequeryAllocRule(1:student_info.StudentInfoQueryRequest req),

这样,thrift就算是写好了。

 

第二步:校验并编译thrift

第一次写thrift可能会有语法错误,比如忘记加逗号或者冒号是中文的,

可以用这种方法校验

(1)点击总thrift文件右键 copy path -> absolute path

  (2)  terminal里敲: thrift --gen java [这里添加thrift的绝对路径]

可以提示哪一行有语法错误。

 

然后到打开右侧Maven,在client包的Lifecycle中install就可以生成jar包里了。

 

第三步:实现方法接口

找到studentMapper,

自动生成一个方法:selectStudentByStudentNo

然后到Service层,StudentManager中写一下方法:

/**
     * 根据 studentNo 查询学生信息
     *
     * @param studentNo 学生编码
     */
    public Optional<StudentInfoVO> queryStudentInfoByStudentNo(String StudentNo){
        
        StudentInfo studentInfo =  StudentMapper.selectStudentByStudentNo(StudentNo);
       

        return Optional.ofNullable(BeanCopyUtil.copyToTargetClass(studentInfo,StudentInfoVO.class));
    }

这里BeanCopyUtil是一个对象属性复制方法,以后会更新一下,可以理解为把两个对象名称一样的属性直接进行自动赋值。

这样接口就写好了,然后在web层调用一下。

 

第四步:调用接口

在web层里建立一个thriftServiceImpl的类(java)

先添加manager

    @Override
    @AutoLog("[rpc]")
    public StudentInfoQueryResponse studentInfoRule(StudentInfoQueryRequest req)throws TException{

        StudentInfoQueryResponse response = new StudentInfoQueryResponse();
        response.setBaseResp(new BaseResp());


        StudentInfoVO studentInfoVO = StudentInfoManager.queryStudentInfoByShopNo(req.StudentNo).orElse(null);
        response.setStudentInfo(BeanCopyUtil.copyToTargetClass(StudentInfoVO,StudentInfo.class));

        return response;
    }

这样就可以在另外一个工程里访问student的属性方法了。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值