跳转至

异步请求

一、异步单次请求

异步调用具体说明参考HTTP异步请求概述

注意

在一次调用中只发送一次同步请求数据。

1. 接口描述

/user/async 获取数据列表(服务方)

  • 接口声明

    服务方使用中间件客户端异步请求获取数据列表时调用该接口

  • 接口约束

  • URI

    GET /user/async

服务方获取数据列表输入参数如下:

序号 参数 是否必填 参数类型 描述
1 pageSize int 每页数量
1 pageNo int 页码
  • 请求消息

    可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:

1
2
3
4
{
 "pageSize":"XXXXXXXXX",
 "pageNo":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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编码,请求消息具体如下:

1
2
3
{
 "data":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "code": 0,
 "data": {},
 "msg": "ActionOK"
}
调用方应答数据列表输出结果如下:

序号 参数 参数类型 描述
1 code Integer 返回状态码
2 msg String 返回状态信息
3 data Object 返回业务数据

2. 代码示例

  • 调用方代码示例

提示

异步请求时,必须在ReqOption对象中,设置callBackUrlcallBackMethod两个参数。

此处两个参数用于告诉服务方的中间件,具体的应答接口地址和应答接口的类型。

        // 构建请求参数
        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);
  • 服务方应答代码示例

提示

  1. 服务方在应答时需要知道应答id。
  2. 应答会随着参数一起传如接口,使用request.getParameter("callbackId")可接收到应答id。
  3. 此处代码示例展示的为服务方应答时的代码示例。
        // 从数据库获取调用方请求的数据
        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);

二、异步多次请求

异步多次请求,可以参考同步多次请求,就是将异步单次操作进行多次调用。

注意

  1. 异步多次请求参考同步请求时,需要设置请求为异步(sync=false),同时需要设置应答接口url(callbackUrl)及应答接口类型(CallbackMethod)。
  2. 如果多次请求的应答接口均为同一个,则推荐将请求ID(cid)也设置为同一个。

三、异步上传文件

注意

  1. 上传文件的方式为,将文件的 绝对路径 发送给中间件,而不是将文件流发送给中间件。
  2. 由于中间件和宿主服务部署在同一个操作系统中,所以中间件接收到文件路径后,可以直接读取到文件,并通过grpc方式发送给服务方中间件,进行文件传输。
  3. 由于中间件托管了文件传输,所以在文件传输过程中可以携带参数进行传输。
  4. 当前版本文件传输,单次请求只支持单文件传输。若要传输多个文件,请将多个文件压缩为一个文件进行传输,或者多次调用文件传输请求。
  5. 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。

1. 接口描述

/user/asyncUpload 文件上传(服务方)

  • 接口声明

    服务方使用中间件客户端异步上传文件时调用该接口

  • 接口约束

  • URI

    POST /user/asyncUpload

服务方异步上传文件输入参数如下:

序号 参数 是否必填 参数类型 描述
1 editor String 编辑人
2 file String 文件路径
  • 请求消息

    可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:

1
2
3
4
{
 "editor":"XXXXXXXXX",
 "file":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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编码,请求消息具体如下:

1
2
3
{
 "data":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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);
  • 服务方应答代码示例

提示

  1. 服务方在应答时需要知道应答id。
  2. 应答会随着参数一起传如接口,使用request.getParameter("callbakcId")可接收到应答id。
  3. 此处代码示例展示的为服务方应答时的代码示例。
  4. 此部分代码用于添加到接收文件完成后,告诉调用方已经完成文件接收,如果接收文件失败也可以通过此方式进行通知。
        // 构建请求参数
        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. 异步下载文件其实是由调用方申请文件。
  2. 服务方获取申请后进行审批等流程,然后将文件推送给调用方。
  3. 为安全起见,当前中间件不会主动删除获取文件,请使用者使用后自行移动文件或删除文件。

1. 接口描述

/user/download 文件下载(服务方)

  • 接口声明

    服务方使用中间件客户端异步下载文件时调用该接口

  • 接口约束

  • URI

    GET /user/download

服务方异步下载文件输入参数如下:

序号 参数 是否必填 参数类型 描述
1 editor String 编辑人
2 file String 需要下载的文件
  • 请求消息

    可以用FormData格式传输,若非FormData格式且字段中还有特殊符号,需使用URLEncode编码,请求消息具体如下:

1
2
3
4
{
 "editor":"XXXXXXXXX",
 "file":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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编码,请求消息具体如下:

1
2
3
{
 "data":"XXXXXXXXX",
}
  • 响应信息

1
2
3
4
5
{
 "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);
回到页面顶部