2017-03-22 1 views
2

API 응답 캐시로 APIM 성능을 테스트했습니다. 결과는 내 기대와 조금 다릅니다. 은 아래와 같습니다.HTTP 응답 상태 코드로 API 응답 캐시를 구성하는 방법은 무엇입니까?

첫 번째 API는 API 게이트웨이를 통해 API 서비스에서 404 응답 상태 코드를 가져야합니다. 그래서 두 번째 응답은 API 응답 캐시의 404 응답 상태 코드가 될 것으로 예상했습니다. 그러나 응답 본문이 동일한 200 개의 응답 상태 코드 (첫 번째와 다른)가 반환되었습니다.

WS02 문서에서 다음과 같은 메모를 읽었습니다.

캐시 조정자는 HTTP 응답의 응답 상태 코드를 캐시 테이블에 캐시하지 않습니다. 대신 기본 요청 성공 상태 응답 인 캐시 히트에 "200 OK"상태 코드를 반환합니다. 요청이 캐시 적중을 얻었을 때 다른 상태 코드를 반환하려면 onCacheHit 시퀀스에서 응답 상태 코드를 업데이트 할 수 있습니다.

메모를 의미하는 것이 무엇인지 이해했지만 그 방법을 모릅니다. 캐시 조정, 특히 중재 구문을 사용하는 것이 내 영역이 아닙니다.

HTTP 응답 상태 코드와 함께 작동하는 API 응답 캐시를 원합니다. 누군가 나를 안내 해줄 수 있습니까?

답변

1

이 문제를 해결할 수있는 방법을 찾았습니다.
이것은 잘못된 것일 수 있지만 의도 한대로 작동합니다.
(HTTP 응답 코드가 200이고 GET 메서드 인 경우 API 응답 캐시가 작동 함)

다음과 같이 velopcity_templete.xml 파일을 편집했습니다.

<inSequence> 
    ... 
    ## check and set response caching 
    #if($responseCacheEnabled) 
    #if($resource.getMethodsAsString() == 'GET') 
    <cache scope="per-host" collector="false" hashGenerator="org.wso2.caching.digest.REQUESTHASHGenerator" timeout="$!responseCacheTimeOut"> 
     <implementation type="memory" maxSize="500"/> 
    </cache> 
    #end 
    ... 
</inSequence> 

<outSequence> 
    <class name="org.wso2.carbon.apimgt.usage.publisher.APIMgtResponseHandler"/> 
    ## check and set response caching 
    #if($responseCacheEnabled) 
    #if($resource.getMethodsAsString() == 'GET') 
    <filter regex="200" source="$axis2:HTTP_SC"> 
      <then> 
       <cache scope="per-host" collector="true"/> 
      </then> 
     </filter> 
    #end 
    #end 
    <send/> 
</outSequence> 

누군가가 더 좋고 표준적인 방법을 사용하면 나에게 도움이 될 것입니다.

관련 문제