미완성 된 User Cache Get 1차 리팩토링 작업
Main 요청 시 넘어올 값의 class를 모르기에 String으로 받도록 수정
public String getMainPathData(String path, String queryString) throws JsonProcessingException {
String mainResponse = webClient.get()
.uri("<http://mainHost:8080/{path}>", path)
.retrieve()
.bodyToMono(String.class) // 메인 서버에서 오는 요청을 String으로 받는다.
// main 서버는 모든 데이터에 대해 ok, data형태로 넘어온다. 이를 받을 Response 객체를 활용할 수 없을까?
.log()
.block();
System.out.println(mainResponse);
// 여기서 그냥 반환을 MainServerResponse로 하는 것
// 캐시 서버에서 Main의 데이터를 활용할 것도 아닌데 String에서 꼭 변환을 해야할까?
return mainResponse;
}
반환 값 처리 기능 작동하도록 추가 작성
public UserCacheResponse postInCache(String path, String queryString) throws BaseException {
try {
String response = getMainPathData(path, queryString);
// 현재 옵션이 없을 때 옵션을 생성해서 반환하는 코드를 추가 작성 필요
MetadataGetResponse metadata = metadataService.findOrCreateMetadataById(path);
redisTemplate.opsForValue().set(path, response, metadata.getMetadataTtlSecond());
return UserCacheResponse.builder()
.url(path)
.ttl(metadata.getMetadataTtlSecond())
.createAt(LocalDateTime.now())
.response(response)
.build();
} catch (JsonProcessingException e) {
throw new BaseException(BaseResponseStatus.DATABASE_ERROR);
}
}
UserCacheResponse Setter 사용 수정
package com.sinor.cache.user.model;
import java.time.LocalDateTime;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class UserCacheResponse {
/**
* @param id
* @param createAt 생성시간
* @param ttl 설정 만료 시간 (Metadata value)
* @param url 상위 URL
* @param response 해당 캐시에 대한 응답
*/
private LocalDateTime createAt;
private Long ttl;
private String url;
@JsonSerialize
private String response;
}