缓存中介不在EI 6.1中返​​回缓存响应

时间:2017-05-02 17:13:31

标签: wso2 wso2esb wso2dss wso2ei

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

1 个答案:

答案 0 :(得分:0)

我无法让缓存介体在api中工作,但我发现它在代理服务中实现时表现得如预期的那样。
所以我最终重构了我的集成,以便api调用代理服务,然后这个代理将在调用dss服务之前验证缓存。
由于对代理和dss的调用使用本地传输,因此对性能没有太大影响 如果有人在将来阅读此内容,并对如何在api服务上正确使用缓存中介有一些了解,请发表评论。