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 Factory
    import 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 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

    좋은 웹페이지 즐겨찾기