我是中间件技术的初学者。我已经开始使用WSO2。现在,我了解到WSO2在不同位置具有缓存功能。其中两个位于密钥管理器缓存中,密钥和响应缓存。
我的问题很简单(天真),如果我们缓存错误的Response,我们将再次获得响应。
例如:
我碰到了这个虚拟API请求http://dummy.restapiexample.com/api/v1/employees
,该请求应该给出一个雇员列表,但是却给了我null或其他信息。现在,此响应被缓存在响应缓存中,这意味着我将继续获得null。哪有错缓存是有道理的,但它是缓存所有对错的响应。那么它的处理方式是什么?
密钥管理器的模拟。在API网关级别和密钥管理器级别缓存密钥有什么意义?无论如何,如果它是错误的密钥或过期的密钥,我们都必须重新生成它。
请回答。我的问题听起来很幼稚,但请您解释一下。
答案 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中时。