springcloud筆記四hystrix


一、サービスの格下げ(サービスプロバイダ)
1.pom.xml
		
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix
        
2.起動類追加@EnbleCircuitBreakerコメント
3.サービスの劣化が必要な方法に@HystrixCommandを追加します.
@HystrixCommand(fallbackMethod = "paymentInfo_timeout_handler", commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value = "2000")
    })
4.トリガサービスの降格条件や異常が発生した場合の実行方法を提供します.
public String paymentInfo_timeout_handler(Long id){
        return "  :" + Thread.currentThread().getName() + "          ,id:" + id + ",hystrix    ";
    }
二、サービスの格下げ(消費者サービス)
1.pom.xml
		
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix
        
2.yamlファイル
feign:
  hystrix:
    enabled: true
  client:
    config:
      default:
        ReadTimeout: 15000
        ConnectTimeout: 15000   #  ribbon    
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 15000 #   hystrix     
3.スタートクラス追加@EnbleHystrixコメント
4.サービスの劣化が必要な呼び出しインターフェースに@HystrixCommandを追加する.
@HystrixCommand(fallbackMethod = "paymentInfo_timeout_fallback", commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value = "9000")
    })
5.トリガサービスの降格条件を提供するか、または呼び出しに異常が発生した場合の実行方法
public String paymentInfo_timeout_fallback(@PathVariable("id") Long id){
        return "      80,             " + id;
    }
6.注意:hystrix.com mmand.default.execution.isolation.thread.timeout Inmillisecondsとribbonのタイムアウト時間はデフォルトでは1 sです.ネット上では1つだけ配置すると言われていますが、本人がテストしてみます.この二つの構成はどれも少なくて、呼び出し時間が1 sを超えたらサービスが劣化します.
三、グローバルサービスダウングレードDefault Properties
1.インターフェースクラスにコメントを追加する@Default Properties
@DefaultProperties(defaultFallback = "global_fallback")
2.トリガサービスの降格時に実行する方法を提供します.
	public String global_fallback(){
        return "          ";
    }
3.サービス劣化が必要なインターフェースに@HystrixCommandコメントを追加し、デフォルトトリガサービスが降格した場合、グローバルサービスの降格処理方法を実行します.
四、通配サービスの格下げ
1.Feign Clientインターフェースを提供する実現類(サービス降級処理類)
@Component
public class OrderServiceImpl implements OrderService {
    @Override
    public String paymentInfo(Long id) {
        return "paymentIfo fall back           ";
    }

    @Override
    public String paymentInfo_timeout(Long id) {
        return "paymentIfo time out fall back           ";
    }
}
2.@Feign Clientのfallback属性を定義することは、サービス劣化処理類を指す.
@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT", fallback = OrderServiceImpl.class)
五、サービスの溶断
    :           closed  ,       ,  open  ,          ,       MTTR(        ,  5s),             half open
    :             
    :              ,                      ,    
アナログコードは以下の通りです.
@HystrixCommand(fallbackMethod = "paymentCircutHandler", commandProperties = {
            @HystrixProperty(name="circuitBreaker.enabled", value = "true"),  //       
            @HystrixProperty(name="circuitBreaker.requestVolumeThreshold", value = "10"),  //    
            @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds", value = "10000"),  //     
            @HystrixProperty(name="circuitBreaker.errorThresholdPercentage", value = "60"),   //          
    })
    @GetMapping("/payment/hystrix/circut/{id}")
    public String paymentCircutBreaker(@PathVariable Long id){
        if (id < 0){
            throw new RuntimeException("id   ");
        }
        String result = "  :" + Thread.currentThread().getName() + "     ,   :" + IdUtil.simpleUUID();
        log.info("******result:{}", result);
        return result;
    }

    public String paymentCircutHandler(Long id){
        return "id   ,     ";
    }
Hystrix遮断器の三つの重要な指標パラメータ
1、circeuit Breaker.sleep Window InMilliseconds
         ,      。                  ,   10 (10000)。
2、circeuit Breaker.request VolumeThreshed
                 ,   20。    ,                    ,              。               。
3、circurit Breaker.errorThresold Perentage
                    ,   50(        50%    )。    ,        ,   100     ,  50      。       ,        。         ,   51         ,     fallback  。
六、Hystrixグラフィックスdashboard
hystrix dashboardプロジェクトモジュールの構築
pom.xml
		
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix-dashboard
        
クラスを開始
@EnbaleHystrixDashboardコメントを追加します.
dashboardプロジェクトが起動したら、ブラウザで監視画面を開きます.
http://localhost:9001/hystrix
モニタ項目を追加
http://localhost:8008/hystrix.stream
注意
シリコンバレーの授業によると、スプリングクラウドのピットのため、監視対象項目の起動クラスには次のコードが必要です.
@Bean
    public ServletRegistrationBean getServlet(){
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }