我正在尝试向作为API公开的服务添加缓存功能,以便重复的请求将获得缓存响应。但是,调解器不是缓存的响应,而是返回客户端发送的消息 下面是我的api的配置。它描述了一个get资源,它接收两个查询参数并使用它们来创建payoad,并将其发送到本地dss服务:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/config" name="myAPI" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET">
<inSequence>
<cache collector="false" hashGenerator="org.wso2.carbon.mediator.cache.digest.DOMHASHGenerator" id="testCache" scope="per-mediator" timeout="200">
<onCacheHit/>
<implementation maxSize="100" type="memory"/>
</cache>
<property expression="$url:intg" name="uri.integration" scope="default" type="STRING"/>
<property expression="$url:inst" name="uri.institution" scope="default" type="STRING"/>
<payloadFactory media-type="xml">
<format>
<con:show xmlns:con="http://com.dvg.wso2/configservice">
<con:SEL_INTG_NAME>$1</con:SEL_INTG_NAME>
<con:SEL_INSTITUTION>$2</con:SEL_INSTITUTION>
</con:show>
</format>
<args>
<arg evaluator="xml" expression="get-property('uri.integration')"/>
<arg evaluator="xml" expression="get-property('uri.institution')"/>
</args>
</payloadFactory>
<header name="Action" scope="default" value="urn:show"/>
<send>
<endpoint>
<address format="soap11" uri="local:///services/INTG_DVG_ConfigService/"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<cache collector="true" scope="per-mediator" id="testCache"/>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
我的预期输出应该是这样的:
<soapenv:Body>
<properties>
<property>
<key>A</key>
<value>A</value>
</property>
</properties>
</soapenv:Body>
但是我收到了这样的缓存回复:
<con:show xmlns:con="http://com.dvg.wso2/configservice"><con:SEL_INTG_NAME>A</con:SEL_INTG_NAME><con:SEL_INSTITUTION>A</con:SEL_INSTITUTION></con:show>
我正在按顺序创建的有效负载的内容。应该说明的是,在缓存未命中的情况下,我收到了预期的响应。
高速缓存介体(按原样配置)是否应该存储高速缓存未命中的响应并在高速缓存命中时返回? 为什么它回答错误的内容?
---编辑---
更改了org.wso2.carbon.mediator.cache.CacheMediator日志的配置后,我能够确认缓存中介确实正在保存并恢复输入消息而不是响应。
如果我尝试在proxyService中仅在API中重现它,则不会发生此行为。
答案 0 :(得分:0)
我无法让缓存介体在api中工作,但我发现它在代理服务中实现时表现得如预期的那样。
所以我最终重构了我的集成,以便api调用代理服务,然后这个代理将在调用dss服务之前验证缓存。
由于对代理和dss的调用使用本地传输,因此对性能没有太大影响
如果有人在将来阅读此内容,并对如何在api服务上正确使用缓存中介有一些了解,请发表评论。