Hystrix 애너테이션을 사용하여 Circuit Breaker (회로 차단기) 패턴으로 원격 호출 실행
This commit is contained in:
@@ -4,11 +4,15 @@ import com.assu.cloud.memberservice.client.EventRestTemplateClient;
|
|||||||
import com.assu.cloud.memberservice.config.CustomConfig;
|
import com.assu.cloud.memberservice.config.CustomConfig;
|
||||||
import com.assu.cloud.memberservice.event.source.SimpleSourceBean;
|
import com.assu.cloud.memberservice.event.source.SimpleSourceBean;
|
||||||
import com.assu.cloud.memberservice.model.Member;
|
import com.assu.cloud.memberservice.model.Member;
|
||||||
|
import com.assu.cloud.memberservice.utils.CustomContextHolder;
|
||||||
|
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
|
||||||
|
import org.apache.tomcat.util.descriptor.web.ContextHandler;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/member")
|
@RequestMapping("/member")
|
||||||
@@ -89,4 +93,37 @@ public class MemberController {
|
|||||||
// DB 에 삭제 작업 (간편성을 위해 DB 작업은 생략)
|
// DB 에 삭제 작업 (간편성을 위해 DB 작업은 생략)
|
||||||
simpleSourceBean.publishMemberChange("DELETE", userId);
|
simpleSourceBean.publishMemberChange("DELETE", userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hystrix 테스트 (RestTemplate 를 이용하여 이벤트 서비스의 REST API 호출)
|
||||||
|
*/
|
||||||
|
@HystrixCommand // 모두 기본값으로 셋팅한다는 의미
|
||||||
|
@GetMapping(value = "hys/{name}")
|
||||||
|
public String hys(ServletRequest req, @PathVariable("name") String name) {
|
||||||
|
logger.debug("LicenseService.getLicensesByOrg Correlation id: {}", CustomContextHolder.getContext().getCorrelationId());
|
||||||
|
//randomlyRunLong();
|
||||||
|
sleep();
|
||||||
|
return "[MEMBER] " + eventRestTemplateClient.gift(name) + " / port is " + req.getServerPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3번 중 1번은 sleep()
|
||||||
|
*/
|
||||||
|
private void randomlyRunLong() {
|
||||||
|
logger.debug("randomlyRunLong");
|
||||||
|
Random rand = new Random();
|
||||||
|
int randomNum = rand.nextInt((3-1)+1)+1;
|
||||||
|
|
||||||
|
if (randomNum == 3) {
|
||||||
|
sleep();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sleep() {
|
||||||
|
try {
|
||||||
|
Thread.sleep(3000); // 3,000 ms (3초), 기본적으로 히스트릭스는 1초 후에 호출을 타임아웃함
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user