내 메서드에는 두 개의 API 호출이 필요하며 Spring Boot @Cacheable
와 Resilience4j @RateLimiter
( link to doc ) 로 장식되어 있습니다 .
@Cacheable(value = "getProjectFile")
@RateLimiter(name = "getProjectFile")
public Optional<String> getProjectFile(String projectName) {
return getFileName(projectName).flatMap(this::getProjectFileFromFileName);
}
private Optional<String> getFileName(String projectName) {
String url = getUrlFromProjectName(projectName);
return Optional.ofNullable(restTemplate.getForObject(url, String.class));
}
private Optional<String> getProjectFileFromFileName(String fileName) {
String url = getUrlFromFileName(fileName);
return Optional.ofNullable(restTemplate.getForObject(url, String.class));
}
두 주석 모두 완벽하게 작동 하지만 캐시 된 값에 액세스 할 때에도 속도 제한 기가 켜지므로 프로그램 속도가 불필요하게 느려집니다.
이 문제를 해결하기 위해 @RateLimiter
주석을 getFileName
, getProjectFileFromFileName
또는 둘 다로 이동하려고 시도했지만 갑자기 작동이 중지되었습니다 (코드가 컴파일되지만 요청이 너무 자주 발생 함).
@RateLimiter
첫 번째 기능 은 작동하지만 두 번째 또는 세 번째 기능 은 작동 하지 않는 이유는 무엇 입니까? 그리고 캐시 된 함수 내에서 속도 제한기를 어떻게 얻을 수 있습니까?