WSO2:缓存密钥和响应

时间:2019-09-22 03:19:17

标签: caching wso2

我是中间件技术的初学者。我已经开始使用WSO2。现在,我了解到WSO2在不同位置具有缓存功能。其中两个位于密钥管理器缓存中,密钥和响应缓存。

我的问题很简单(天真),如果我们缓存错误的Response,我们将再次获得响应。 例如: 我碰到了这个虚拟API请求http://dummy.restapiexample.com/api/v1/employees,该请求应该给出一个雇员列表,但是却给了我null或其他信息。现在,此响应被缓存在响应缓存中,这意味着我将继续获得null。哪有错缓存是有道理的,但它是缓存所有对错的响应。那么它的处理方式是什么?

密钥管理器的模拟。在API网关级别和密钥管理器级别缓存密钥有什么意义?无论如何,如果它是错误的密钥或过期的密钥,我们都必须重新生成它。

请回答。我的问题听起来很幼稚,但请您解释一下。

1 个答案:

答案 0 :(得分:0)

是,同意你的看法。理想情况下,应根据状态码选择可缓存的响应。我刚刚创建了feature improvement request

但是,运行时已经支持此功能,只有UI缺少它。

因此,您可以通过更改配置文件来使其工作。

为此,打开repository/resources/api_templates/velocity_template.xml并搜索<cache scope="per-host" collector="false"。 (请注意collector=false

然后,像这样在<protocol>标签上方添加<implementation>标签。

<cache scope="per-host" collector="false" hashGenerator="org.wso2.carbon.mediator.cache.digest.REQUESTHASHGenerator" timeout="$!responseCacheTimeOut">
    <protocol type="HTTP">
       <methods>*</methods>
       <headersToExcludeInHash/>
       <responseCodes>2[0-9][0-0]</responseCodes>
       <enableCacheControl>false</enableCacheControl>
       <includeAgeHeader>false</includeAgeHeader>
       <hashGenerator>org.wso2.carbon.mediator.cache.digest.REQUESTHASHGenerator</hashGenerator>
    </protocol>
    <implementation type="memory" maxSize="500"/>
</cache>

请注意responseCodes中2xx响应的正则表达式。我希望这能回答您的第一个问题。


关于密钥缓存,是的,网关和密钥管理器上都有缓存。但是默认情况下,仅启用网关缓存。

<CacheConfigurations>
    <!-- Enable/Disable token caching at the Gateway-->
    <EnableGatewayTokenCache>true</EnableGatewayTokenCache>
    <!-- Enable/Disable API resource caching at the Gateway-->
    <EnableGatewayResourceCache>true</EnableGatewayResourceCache>
    <!-- Enable/Disable API key validation information caching at key-management server -->
    <EnableKeyManagerTokenCache>false</EnableKeyManagerTokenCache>

在某些情况下,有些人希望禁用网关缓存并启用密钥管理器缓存,例如,当网关位于DMZ中时。