如何使用 HTTP 响应状态代码配置 API 响应缓存?

铁彩虹

我使用 API 响应缓存测试了 APIM 性能。结果与我的预期略有不同。像下面。

第一个 API 请求通过 API 网关从 API Service 获取 404 响应状态码。所以我预计第二个响应将是来自 API 响应缓存的 404 响应状态代码。但是它返回了 200 个响应状态代码(与第一个不同),具有相同的响应主体。

我从 WSO2 文档中阅读了如下所示的一些注释。

缓存介体不会在缓存表中缓存 HTTP 响应的响应状态代码。相反,它在缓存命中时返回“200 OK”状态代码,这是默认的请求成功状态响应。如果您想在请求获得缓存命中时返回不同的状态代码,您可以在 onCacheHit 序列中更新响应状态代码。

我明白这张纸条的意思,但我不知道该怎么做。缓存中介不是我的领域,尤其是中介语法。

我希望 API 响应缓存与 HTTP 响应状态代码一起使用。有人可以指导我吗?

铁彩虹

我找到了我自己的方法来解决这个问题。
这可能是错误的,但它按我的意图工作。
(当 HTTP 响应代码为 200 和 GET 方法时,API 响应缓存有效。)

我编辑了 velopcity_templete.xml 文件,如下所示。

<inSequence>
    ...
    ## check and set response caching
    #if($responseCacheEnabled)
    #if($resource.getMethodsAsString() == 'GET')
    <cache scope="per-host" collector="false" hashGenerator="org.wso2.caching.digest.REQUESTHASHGenerator" timeout="$!responseCacheTimeOut">
        <implementation type="memory" maxSize="500"/>
    </cache>
    #end
    ...
</inSequence>

<outSequence>
    <class name="org.wso2.carbon.apimgt.usage.publisher.APIMgtResponseHandler"/>
    ## check and set response caching
    #if($responseCacheEnabled)
    #if($resource.getMethodsAsString() == 'GET')
    <filter regex="200" source="$axis2:HTTP_SC">
            <then>
                <cache scope="per-host" collector="true"/>
            </then>
        </filter>
    #end
    #end
    <send/>
</outSequence>

如果有人有更好更标准的方法,这对我会很有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章