1.RPC作用
以目前的认识,RPC的作用:多个工程之间数据传输。
2.逐步完成RPC接口实现
第一步:
编写thrift文件,语法格式和java不同。
在布局分层里安排在了client层
代码语言:javascript复制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总文件中添加相关方法声明
代码语言:javascript复制/**
* 根据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中写一下方法:
代码语言:javascript复制/**
* 根据 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
代码语言:javascript复制 @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的属性方法了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182280.html原文链接:https://javaforall.cn