§ 本文目标
通过本章节,将掌握RPC接口的开发及使用
§ RPC简单介绍
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发分布式程序就像开发本地程序一样简单
§ 练习场景
本次练习需要创建三个模块:
- 客户管理微服务模块(custmng):服务提供方,提供客户额度管理查询功能
- 信誉度管理微服务模块(creditmng):服务消费方,消费额度管理功能的查询功能
- 客户管理Client模块(custmng-client):客户管理提供给其他微服务模块使用的接口模块
前提:
- 本章节使用的微服务模块custmng(复用创建的微服务工程)
- 为提供方微服务custmng的额度表准备测试数据,用于消费方查询使用
insert into limit_info (LIMIT_ID, LIMIT_CODE, LIMIT_AMT, LIMIT_DESC, LIMIT_USER_ID)
values ('00000', '101010', '2222222', 'airabl', 'air')
2
为custmng微服务的LimitInfoResource.java新增方法query
@RestController
@RequestMapping("/api/limitinfo")
public class LimitInfoResource extends CommonResource<LimitInfo, String>{
@Autowired
private LimitInfoService limitInfoService;
@Override
protected CommonService getCommonService() {
// TODO 自动生成的方法存根
return limitInfoService;
}
@GetMapping(value="/query")
public LimitInfo query(@RequestParam(value="limitId") String limitId) {
return limitInfoService.selectByPrimaryKey(limitId);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
§ 操作步骤
为custmng微服务创建SDK模块
§ 服务提供方providerrpc微服务
§ custmng-client模块创建
通常,某个微服务需要提供接口给其他微服务模块时,需要开发并封装Client模块,其他微服务通过pom引入的方式,进行接口消费,且必须在统一注册中心集群环境下
基于已经创建微服务工程->右键“模块”->选择Client


创建后工程结构
§ 接口创建
在custmng-client工程下,应用开发->业务开发->业务逻辑->右键,新建类
DTO创建
package cn.com.yusys.yusp.service;
mport java.io.Serializable;
**
* 额度实体表.
*
* @since 2.1.1
*/
public class LimitInfoDTO implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 额度ID
*/
private String limitId;
/**
* 额度代码
*/
private String limitCode;
/**
* 额度金额
*/
private String limitAmt;
/**
* 描述
*/
private String limitDesc;
/**
* 客户ID
*/
private String limitUserId;
/**
* @param limitId
*/
public void setLimitId(String limitId) {
this.limitId = limitId == null ? null : limitId.trim();
}
/**
* @return LimitId
*/
public String getLimitId() {
return this.limitId;
}
/**
* @param limitCode
*/
public void setLimitCode(String limitCode) {
this.limitCode = limitCode == null ? null : limitCode.trim();
}
/**
* @return LimitCode
*/
public String getLimitCode() {
return this.limitCode;
}
/**
* @param limitAmt
*/
public void setLimitAmt(String limitAmt) {
this.limitAmt = limitAmt == null ? null : limitAmt.trim();
}
/**
* @return LimitAmt
*/
public String getLimitAmt() {
return this.limitAmt;
}
/**
* @param limitDesc
*/
public void setLimitDesc(String limitDesc) {
this.limitDesc = limitDesc == null ? null : limitDesc.trim();
}
/**
* @return LimitDesc
*/
public String getLimitDesc() {
return this.limitDesc;
}
/**
* @param limitUserId
*/
public void setLimitUserId(String limitUserId) {
this.limitUserId = limitUserId == null ? null : limitUserId.trim();
}
/**
* @return LimitUserId
*/
public String getLimitUserId() {
return this.limitUserId;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
§ 创建RPC接口服务
/**
* 额度管理API接口.
*
* @since 2.1.1
*/
@Component
public class LimitInfoHandler {
@Reference
private LimitInfoService limitInfoService;
/**
* 额度信息查询接口.
*
* @param limitId
* 额度ID
* @return
*/
public LimitInfoDTO query(String limitId){
return limitInfoService.selectByPrimaryKey(limitId);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
§ 接口发布
完成接口自测后,即可将client包按照版本规范,发布到maven仓库,同时通过wiki或文档等方式,提供API、参数的说明文档
在工程目录执行
mvn deploy -e -DskipTests
发布前提
- 本机已安装apache maven
- setting 配置maven私服账号信息
- 工程pom增加发布的具体仓库信息
§ 消费者消费
§ 创建creditmng微服务模块
该微服务工程开发为消费端,调用custmng提供第SDK接口;创建流程和custmng创建流程一直,此处不再重复讲解

除了调整数据库、Redis配置,此微服务使用6002端口

§ 为/creditmng/pom.xml增加SDK包依赖
<dependency>
<groupId>cn.com.yusys.yusp</groupId>
<artifactId>custmng-client</artifactId>
<version>2.1.1-SNAPSHOT</version>
</dependency>
2
3
4
5
§ 增加接口消费
@RestController
@RequestMapping("/api/consumer")
public class ConsumberResource {
@Autowired
LimitInfoHandler limitInfoHandler;
@GetMapping(value="/query")
public String query(@RequestParam(value="limitId") String limitId) {
LimitInfoDTO limitInfoDTO = limitInfoHandler.query(limitId);
return Optional.ofNullable(limitInfoDTO)
.map(LimitInfoDTO::getLimitDesc)
.orElseGet(()->"");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
§ 测试
§ 调用custmng接口,查看服务提供方接口查询
http://172.16.20.208:6001/api/limitinfo/query?limitId=00000


§ 调用creditmng接口,查询消费方接口消费
http://localhost:6002/api/consumer/query?limitId=00000

点击try it out,swagger测试结果:

← CRUD单表增删该查 事务开发-本地事务 →