2017-05-02 10 views
0

API로 공개 된 서비스에 캐시 기능을 추가하려고하므로 반복되는 요청이 캐시 된 응답을 얻을 수 있습니다. 하지만 캐시 된 응답 대신 중재자가 클라이언트에서 보낸 메시지를 반환합니다.캐시 조정자가 EI 6.1에서 캐시 된 응답을 반환하지 않습니다.

<?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> 

내 예상 출력 뭔가해야한다 :
여기 내 api.It의 구성은 두 개의 쿼리 매개 변수를 수신하고 로컬 DSS 서비스에 보내는 payoad을 만들을 사용하는 GET 자원을 설명합니다 다음 같은 :

<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> 

콘텐츠는 어느 내가 작성하는 페이로드의 순서대로. 캐시 미스의 경우 예상되는 응답을 받았다고 명시해야합니다.

캐시 조정자를 그대로 구성하면 캐시 미스의 응답을 저장하고 캐시 적중시이를 반환해야합니까?
잘못된 콘텐츠로 응답하는 이유는 무엇입니까?

--- 편집 ---, 나는 캐시 중재자는 실제로 저장하는 대신 입력 메시지를 복원하는 것을 conirm 할 수 있었다
org.wso2.carbon.mediator.cache.CacheMediator 로그에 대한 구성을 변경 한 후 응답의.
API에서만 proxyService에서 재생하려고하면이 동작이 발생하지 않습니다.

+0

캐시 유형으로 인해 캐시 검색이 가능할 수도 있습니다 (응답 메시지가 아닌 수신 메시지 캐시) – simar

+0

@simar 캐시가 작동하려면 수집기/검색기 조정자 쌍이 필요하지 않습니까? 하나는 들어오는 메시지의 요청 해시를 검색하고 다른 하나는 캐시에서 응답 메시지를 수집하는 것입니다. –

+0

맞습니다. 문서를 읽는 데주의를 기울이지 않았습니다. – simar

답변

0

캐시 조정자가 API에서 작동하지 못했지만 프록시 서비스에서 구현 될 때 예상대로 작동하는 것으로 나타났습니다.
그래서 API가 프록시 서비스를 호출하도록 리팩터링을 마쳤습니다. 그런 다음이 프록시는 dss 서비스를 호출하기 전에 캐시를 확인합니다.
프록시에 대한 호출과 dss가 로컬 전송을 사용 했으므로 성능에 큰 영향을 미치지 않았습니다.
누군가가 이것을 나중에 읽는 중이며 API 서비스에서 캐시 조정자를 올바르게 사용하는 방법에 대한 통찰력이 있다면 의견을 남겨주세요.