目录

简介

batch-requests 插件可以一次接受多个请求并以 http pipeline 的方式在网关发起多个http请求,合并结果后再返回客户端,这在客户端需要访问多个接口时可以显著地提升请求性能。

提示

外层的 Http 请求头会自动设置到每一个独立请求中,如果独立请求中出现相同键值的请求头,那么只有独立请求的请求头会生效。

属性

如何启用

本插件默认启用。

批量接口请求/响应

插件会为 apisix 创建一个 /apisix/batch-requests 的接口来处理你的批量请求。

接口请求参数:

参数名类型可选默认值描述
queryObjectYes给所有请求都携带的 QueryString
headersObjectYes给所有请求都携带的 Header
timeoutNumberYes3000聚合请求的超时时间,单位为 ms
pipelineHttpRequestNoHttp 请求的详细信息

HttpRequest

参数名类型可选默认值描述
versionEnumYes1.1请求用的 http 协议版本,可以使用 1.0 or 1.1
methodEnumYesGET请求使用的 http 方法,例如:GET.
queryObjectYes独立请求所携带的 QueryString, 如果 Key 和全局的有冲突,以此设置为主。
headersObjectYes独立请求所携带的 Header, 如果 Key 和全局的有冲突,以此设置为主。
pathStringNo请求路径
bodyStringYes请求体

接口响应参数:

返回值为一个 HttpResponse数组

HttpResponse

参数名类型描述
statusIntegerHttp 请求的状态码
reasonStringHttp 请求的返回信息
bodyStringHttp 请求的响应体
headersObjectHttp 请求的响应头

测试插件

你可以将要访问的请求信息传到网关的批量请求接口( /apisix/batch-requests ),网关会以 http pipeline 的方式自动帮你完成请求。

curl --location --request POST 'http://127.0.0.1:9080/apisix/batch-requests' \
--header 'Content-Type: application/json' \
--d '{
    "headers": {
        "Content-Type": "application/json",
        "admin-jwt":"xxxx"
    },
    "timeout": 500,
    "pipeline": [
        {
            "method": "POST",
            "path": "/community.GiftSrv/GetGifts",
            "body": "test"
        },
        {
            "method": "POST",
            "path": "/community.GiftSrv/GetGifts",
            "body": "test2"
        }
    ]
}'

返回如下:

[
    {
        "status": 200,
        "reason": "OK",
        "body": "{\"ret\":500,\"msg\":\"error\",\"game_info\":null,\"gift\":[],\"to_gets\":0,\"get_all_msg\":\"\"}",
        "headers": {
            "Connection": "keep-alive",
            "Date": "Sat, 11 Apr 2020 17:53:20 GMT",
            "Content-Type": "application/json",
            "Content-Length": "81",
            "Server": "APISIX web server"
        }
    },
    {
        "status": 200,
        "reason": "OK",
        "body": "{\"ret\":500,\"msg\":\"error\",\"game_info\":null,\"gift\":[],\"to_gets\":0,\"get_all_msg\":\"\"}",
        "headers": {
            "Connection": "keep-alive",
            "Date": "Sat, 11 Apr 2020 17:53:20 GMT",
            "Content-Type": "application/json",
            "Content-Length": "81",
            "Server": "APISIX web server"
        }
    }
]

禁用插件

正常来说你不需要禁用本插件,如果有特殊情况,请从 /conf/config.yamlplugins 节点中移除即可。