SpringCloud Hystrix 사용
9049 단어 SpringCloudHystrix
분포 식 시스템 에서 서비스 와 서비스 간 의 의존 이 복잡 하고 불가피 한 상황 은 바로 일부 서비스 가 실패 할 것 이다.Hystrix 는 라 이브 러 리 로 서비스 와 서비스 간 의 용 착 기능 을 제공 하 는데 주로 지연 용 착 과 용 착 에 나타 나 분포 식 시스템 의 연동 고장 을 제어 한다.Hystrix 는 격 리 서비스의 방문 점 을 통 해 연동 고장 을 막 고 고장 해결 방안 을 제공 하여 이 분포 식 시스템 의 탄력성 을 높 였 다.
직면 한 문제:하나의 응용 은 보통 여러 개의 서비스 에 의존한다.모든 서 비 스 는 네트워크 가 신뢰 할 수 없고 기계 주택의 신뢰 할 수 없 는 등 불안정 한 요소 로 인해 서비스의 고장 을 초래 할 수 있다.만약 에 우리 가 이런 고장 을 처리 하지 않 으 면 전체 시스템 이 사용 할 수 없 게 될 것 이다.
서비스 눈사태:
정상 적 인 사용자 가 마이크로 서비스 A 를 호출 한 후에 B 를 호출 하여 C 를 호출 한 후에 떠 났 는데 그 중에서 마이크로 서비스 C 가 고장 이 나 서 사용자 가 머 물 렀 다.
B.점점 더 많은 사용자 들 이 들 어 와 서 B 에 머 무 르 면 결국 B 의 자원 이 소 진 되 고 사용 할 수 없 으 며 A 도 점점 사용 할 수 없습니다.이 과
열 연쇄 반응 은 눈사태 처럼 점점 더 큰 영향 을 미 쳐'서비스 눈사태'라 고 부른다.
서비스 중단
참고:www.jb51.net/article/166784.htm
눈사태 효과 에 대응 하 는 마이크로 서비스 링크 보호 메커니즘
링크 를 호출 하 는 특정한 마이크로 서 비 스 를 사용 할 수 없 거나 응답 시간 이 너무 길 면 서비스 가 중단 되 고 이 노드 의 마이크로 서비스 호출 이 없 으 며 잘못된 응답 정 보 를 신속하게 되 돌려 줍 니 다.이 노드 의 마이크로 서비스 호출 응답 이 정상 적 인 것 을 감지 하면 호출 링크 를 복원 합 니 다.
Spring Cloud 에서 Hystrix 를 통 해 이 루어 집 니 다.Hystrix 는 마이크로 서비스 간 호출 상황 을 감시 하고 실패 한 호출 이 일정한 한도 값 으로 되 며 부족 한 것 은 5 초 동안 20 번 호출 에 실패 하면 퓨즈 메커니즘 을 작 동 합 니 다.
서비스 중단 은 다음 과 같은 문 제 를 해결 합 니 다.
4.567917.의존 하 는 대상 이 불안정 할 때 빠 른 실패 의 목적 을 달성 할 수 있다
프로젝트 구축
4실험 환경 구축 중인 프로젝트copy 에 따라 springcloud-provider-dept-hystrix 라 는 새 모듈 을 만 듭 니 다.
가 져 오기 의존
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
쓰다Controller 층 에 서 는@Hystrixcand 를 사용 하여 녹 입 니 다.
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface HystrixCommand {
String groupKey() default "";
String commandKey() default "";
String threadPoolKey() default "";
String fallbackMethod() default "";
HystrixProperty[] commandProperties() default {};
HystrixProperty[] threadPoolProperties() default {};
Class<? extends Throwable>[] ignoreExceptions() default {};
ObservableExecutionMode observableExecutionMode() default ObservableExecutionMode.EAGER;
HystrixException[] raiseHystrixExceptions() default {};
String defaultFallback() default "";
}
@Hystrixcand 에는 defaultFallback()이 기본 예비 방법(default")을 지정 하고,fallback Method()가 실패 후 진행 할 예비 방법(default")을 지정 합 니 다.정상 적 인 방법 호출 에 실 패 했 을 때(5 초 동안 20 번 호출 에 실 패 했 습 니 다)고장 이 났 다 고 생각 되면 녹 여 오류 정 보 를 빠르게 되 돌려 줍 니 다(예비 방법 호출).
@RestController
public class DeptController {
@Autowired
private DeptImpl deptimpl;
@RequestMapping("/dev/{id}")
@HystrixCommand(fallbackMethod = "HystrixGet")//
public Dept DeptqueryByID(@PathVariable("id") Long id) {
Dept dept = deptimpl.queryByID(id);
System.out.println(dept);
if (dept==null) {
throw new RuntimeException("id--->" + id + " ");
}
return dept;
}
public Dept HystrixGet(@PathVariable("id") Long id) {
Dept dept=new Dept();
dept.setDeptnumber(id.intValue());
dept.setDname("id"+id+" ");
dept.setD_source("no~~~~~~");
return dept;
}
}
시작 클래스 에@EnableCurctionBreaker 오픈 용 단 지원 추가
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker//
public class HApplication {
public static void main(String[] args) {
SpringApplication.run(HApplication.class,args);
}
}
서비스 강등즉,서버 압력 이 급증 하 는 상황 에서 호출 되 지 않 는 서 비 스 를 닫 고 자원 을 비 워 정상 적 인 운행 을 보장 하 는 것 이다.
타 오 바 오 쌍십일 환불 통 로 를 닫 으 면
실천 하 다.
원래 FeignClient 에서 fallback Factory 를 가리 키 고 있 습 니 다.
@FeignClient(value = "PROVIDER-NAME",fallbackFactory = SerciceFallbackFactory.class)
public interface DeptClientService {
@RequestMapping(value = "/dev/add")
boolean add(Dept dept);
@RequestMapping(value = "/dev/{id}")
Dept queryByID(@PathVariable("id") Long id );
@PostMapping(value = "/dev/list")
List<Dept> queryAll();
}
자신 을 정의 하 는 Fallback Factoryimport feign.hystrix.Fallback Factory;
import feign.hystrix.FallbackFactory;
@Component
public class SerciceFallbackFactory implements FallbackFactory {
public DeptClientService create(Throwable cause) {
return new DeptClientService() {
public boolean add(Dept dept) {
return false;
}
//
public Dept queryByID(Long id) {
Dept dept = new Dept();
dept.setD_source(" ");
dept.setDname("fail");
dept.setDeptnumber(-1);
return dept;
}
public List<Dept> queryAll() {
return null;
}
};
}
}
클 라 이언 트 설정 파일 에 추가
#
feign:
hystrix:
enabled: true
결과:우리 가 서버 를 닫 은 후에 서 비 스 를 다시 방문 할 때서비스 융단 과 서비스 강등 의 차이
4.567917.서비스 융단 은 서버 에서 이 루어 진 것 이 고 서비스 강등 은 클 라 이언 트 에서 이 루어 진 것 이다4.567917.서비스 가 끊 긴 원인:고장 이 발생 하고 서비스 등급 이 낮 아진 다.전체적인 부 하 를 고려 하여 핵심 업무 의 운행 을 확보한다서비스 모니터링 대시 보드
프로젝트 만 들 기
가 져 오기 의존
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
프로필
server:
port: 9001
hystrix:
dashboard:
# Hystrix Dashboard proxyUrl host , proxyStreamAllowList。
proxy-stream-allow-list: "localhost"
오픈 모니터링 지원
@SpringBootApplication
@EnableHystrixDashboard//
@EnableDiscoveryClient
public class DashboardApplication {
public static void main(String[] args) {
SpringApplication.run(DashboardApplication.class,args);
}
}
실행 후 접근:http://localhost:9001/hystrix힌트 에 따라 spingcloud-provider-dept-hystrix 서버 에 bean 을 추가 합 니 다.
@Bean
public ServletRegistrationBean hystrixMetricsStreamServlet(){
ServletRegistrationBean servlet = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
servlet.addUrlMappings("/actuator/hystrix.stream");
return servlet;
}
실행 후 접근http://localhost:8081/actuator/hystrix.stream 서비스 정 보 를 얻 을 수 있 습 니 다.메모:@Hystrixcand 라 고 표 시 된 방법 을 한 번 호출 해 야 데이터 가 표 시 됩 니 다.@Hystrixcand 라 는 방법 만 모니터링 합 니 다.
저희 도 통과 할 수 있어 요.http://localhost:9001/hystrix 입력
버튼 을 누 르 면 이 서비스 에 대한 모니터링 을 시작 합 니 다.
이상 은 SpringCloud Hystrix 의 사용 에 대한 상세 한 내용 입 니 다.SpringCloud Hystrix 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Spring Cloud] LoadBancer-01discoveryservice-eureka 라는 프로젝트를 생성한다 3개 항목을 추가한다. 1. DiscoveryserviceEurekaApplication.java 생성된 -application에 @EnableEu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.