我正在尝试向作为 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 中重现此行为,则不会发生此行为。