大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
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的属性方法了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182280.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...