异步请求
一、异步单次请求
异步调用具体说明参考HTTP异步请求概述
1. 接口描述
/user/async 获取数据列表(服务方)
-
接口声明
服务方使用中间件客户端异步请求获取数据列表时调用该接口
-
接口约束
无
-
URI
GET /user/async
服务方获取数据列表输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
pageSize |
是 |
int |
每页数量 |
1 |
pageNo |
是 |
int |
页码 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"pageSize":"XXXXXXXXX",
"pageNo":"XXXXXXXXX",
}
|
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
服务方获取数据列表输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
/user/callback 数据列表应答接口(调用方)
-
接口声明
调用方使用中间件客户端异步应答服务方获取数据列表的请求时调用该接口
-
接口约束
无
-
URI
GET /user/callback
调用方应答数据列表输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
data |
是 |
Object |
应答返回列表数据 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
调用方应答数据列表输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
2. 代码示例
提示
异步请求时,必须在ReqOption
对象中,设置callBackUrl
和callBackMethod
两个参数。
此处两个参数用于告诉服务方的中间件,具体的应答接口地址和应答接口的类型。
| // 构建请求参数
Map<String, Object> map = new HashMap<>(1);
map.put("pageSize", 1);
map.put("pageNo", 10);
// 设置请求配置对象
ReqOption option = new ReqOption();
// 设置为异步请求
option.setSync(ReqOption.FALSE);
// 异步请求结束标志设置为false
option.setIsEnd(ReqOption.FALSE);
// 设置异步请求应答接口地址
option.setCallbackUrl("/callback");
// 设置异步请求接口应答地址请求类型
option.setCallbackMethod(HttpType.POST.toString());
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 50000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.GET)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/async")
// 设置传输的数据
.setForm(map)
// 发送数据
.msg(option);
|
提示
- 服务方在应答时需要知道应答id。
- 应答会随着参数一起传如接口,使用
request.getParameter("callbackId")
可接收到应答id。
- 此处代码示例展示的为服务方应答时的代码示例。
| // 从数据库获取调用方请求的数据
List<Map<String, Object>> list = baseMapper.selectAll("table_name",pageSize,pageNo);
// 构建请求参数
Map<String, Object> map = new HashMap<>(1);
map.put("data", list);
// 传输设置
ReqOption reqOption = new ReqOption();
// 设置为应答
reqOption.setBReq(ReqOption.FALSE);
// 设置为异步请求
reqOption.setSync(ReqOption.FALSE);
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间(毫秒),地址及端口号填写配置文件中 middleware-recServer 下的配置
.create("http://localhost:8888", 50000)
// 设置传输的数据
.setForm(map)
// 设置回调id,会随着请求一起传到服务方,每次请求都是唯一的
.setCallBackId(callbackId)
// 发送数据
.msg(reqOption);
|
二、异步多次请求
异步多次请求,可以参考同步多次请求,就是将异步单次操作进行多次调用。
注意
- 异步多次请求参考同步请求时,需要设置请求为异步(sync=false),同时需要设置应答接口url(callbackUrl)及应答接口类型(CallbackMethod)。
- 如果多次请求的应答接口均为同一个,则推荐将请求ID(cid)也设置为同一个。
三、异步上传文件
注意
- 上传文件的方式为,将文件的 绝对路径 发送给中间件,而不是将文件流发送给中间件。
- 由于中间件和宿主服务部署在同一个操作系统中,所以中间件接收到文件路径后,可以直接读取到文件,并通过grpc方式发送给服务方中间件,进行文件传输。
- 由于中间件托管了文件传输,所以在文件传输过程中可以携带参数进行传输。
- 当前版本文件传输,单次请求只支持单文件传输。若要传输多个文件,请将多个文件压缩为一个文件进行传输,或者多次调用文件传输请求。
- 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。
1. 接口描述
/user/asyncUpload 文件上传(服务方)
-
接口声明
服务方使用中间件客户端异步上传文件时调用该接口
-
接口约束
无
-
URI
POST /user/asyncUpload
服务方异步上传文件输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
editor |
否 |
String |
编辑人 |
2 |
file |
否 |
String |
文件路径 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"editor":"XXXXXXXXX",
"file":"XXXXXXXXX",
}
|
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
服务方异步上传文件输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
/user/callbackUpload 异步文件应答接口(调用方)
-
接口声明
调用方使用中间件客户端异步应答服务方上传文件时调用该接口
-
接口约束
无
-
URI
GET /user/callbackUpload
调用方应答异步上传文件输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
data |
是 |
Object |
应答状态数据 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
调用方应答异步上传文件输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
2. 代码示例
| // 设置传输参数
Map<String, Object> map = new HashMap<>(1);
map.put("editor", "Jack");
ReqOption option = new ReqOption();
// 设置为异步请求
option.setSync(ReqOption.FALSE);
// 异步请求结束标志设置为false
option.setIsEnd(ReqOption.FALSE);
// 设置异步请求应答接口地址
option.setCallbackUrl("/callbackUpload");
// 设置异步请求接口应答地址请求类型
option.setCallbackMethod(HttpType.GET.toString());
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 500000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.POST)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/asyncUpload")
// 设置传输的数据
.setForm(map)
// 设置文件接受的字段
.setFileField("file")
// 设置需要传输的文件
.setFile(new File("/Users/Downloads/xxx.tar.gz"))
// 发送数据
.sendFile(option);
|
提示
- 服务方在应答时需要知道应答id。
- 应答会随着参数一起传如接口,使用
request.getParameter("callbakcId")
可接收到应答id。
- 此处代码示例展示的为服务方应答时的代码示例。
- 此部分代码用于添加到接收文件完成后,告诉调用方已经完成文件接收,如果接收文件失败也可以通过此方式进行通知。
| // 构建请求参数
Map<String, Object> map = new HashMap<>(1);
map.put("data", "ok");
// 传输设置
ReqOption reqOption = new ReqOption();
reqOption.setBReq(ReqOption.FALSE);
reqOption.setSync(ReqOption.FALSE);
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间(毫秒),地址及端口号填写配置文件中 middleware-recServer 下的配置
.create("http://localhost:8888", 50000)
// 设置传输的数据
.setForm(map)
// 设置回调id,会随着请求一起传到服务方,每次请求都是唯一的
.setCallBackId(callbackId)
// 发送数据
.msg(reqOption);
|
四、异步下载文件
提示
- 异步下载文件其实是由调用方申请文件。
- 服务方获取申请后进行审批等流程,然后将文件推送给调用方。
- 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。
1. 接口描述
/user/download 文件下载(服务方)
-
接口声明
服务方使用中间件客户端异步下载文件时调用该接口
-
接口约束
无
-
URI
GET /user/download
服务方异步下载文件输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
editor |
否 |
String |
编辑人 |
2 |
file |
否 |
String |
需要下载的文件 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"editor":"XXXXXXXXX",
"file":"XXXXXXXXX",
}
|
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
服务方异步下载文件输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
/user/callbackDownload 文件下载应答接口(调用方)
-
接口声明
调用方使用中间件客户端异步应答服务方下载文件时调用该接口
-
接口约束
无
-
URI
POST /user/callbackDownload
调用方应答异步下载文件输入参数如下:
序号 |
参数 |
是否必填 |
参数类型 |
描述 |
1 |
data |
是 |
Object |
应答状态数据 |
- 请求消息
可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:
| {
"code": 0,
"data": {},
"msg": "ActionOK"
}
|
调用方应答异步下载文件输出结果如下:
序号 |
参数 |
参数类型 |
描述 |
1 |
code |
Integer |
返回状态码 |
2 |
msg |
String |
返回状态信息 |
3 |
data |
Object |
返回业务数据 |
2. 代码示例
调用方发送普通的异步消息进行请求
| // 构建请求参数
Map<String, Object> map = new HashMap<>(1);
map.put("editor", "Jack");
map.put("file", "xxx.tar.gz");
// 设置请求配置对象
ReqOption option = new ReqOption();
// 设置为异步请求
option.setSync(ReqOption.FALSE);
// 异步请求结束标志设置为false
option.setIsEnd(ReqOption.FALSE);
// 设置异步请求应答接口地址
option.setCallbackUrl("/callbackDownload");
// 设置异步请求接口应答地址请求类型
option.setCallbackMethod(HttpType.POST.toString());
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间
.create("http://localhost:8888", 50000)
// 请求类型,根据接口定义设置
.setHttpType(HttpType.GET)
// 中间件中的服务id,根据yml文件配置填写
.setServiceId("1")
// 设置访问的url
.setUrl("/user/asyncDownload")
// 设置传输的数据
.setForm(map)
// 发送数据
.msg(option);
|
| // 构建请求参数
Map<String, Object> map = new HashMap<>(1);
map.put("data", "ok");
// 传输设置
ReqOption reqOption = new ReqOption();
// 设置为应答
reqOption.setBReq(ReqOption.FALSE);
// 发送请求,并获取返回结果
InterCoResult result = MiddlewareClient
// 填写中间件地址及端口号,及超时时间(毫秒),地址及端口号填写配置文件中 middleware-recServer 下的配置
.create("http://localhost:8888", 50000)
// 设置传输的数据
.setForm(map)
// 设置回调id,会随着请求一起传到服务方,每次请求都是唯一的
.setCallBackId(callbackId)
// 设置文件
.setFile(new File("/xxx.tar.gz"))
// 设置文件参数
.setFileField("file")
// 发送数据
.sendFile(reqOption);
|