SpringBootプロジェクトの統合Hystrix

Hystrix

 

HystrixオープンソースのNetflixは、リソースのシステム使用不能溶液の枯渇を引き起こして、遅延を回避するサービス成分分離、信頼を介してサービスの分離、異常です。

 

 

1.サービスのヒューズは何ですか

    サービスヒューズは、サービスコールの実行を吹き込まれ、すぐにリソースを解放することができますので、対応する後続の要求は、直接返されたターゲット・サービスを呼び出すために継続ではなく、

   またはサービス障害は、障害メッセージがクライアントに返されます。全体的な措置を維持するために、ローカルの犠牲は、吹きと呼ばれています。

 

2、ヒューズの意味

 

  基本的に、システムが安定しているように、システムを保護するために、

 

  性能の損失を減らします。

 

  タイムリーな応答;

 

  ヒューズ機能:例外処理、ロギング、動作テストが失敗し、マニュアルリセット、同時、加速切断、再試行失敗した要求。

3、三つの状態Hystrix

  1.状態(クローズ)を吹き飛ばし

    サービスが失敗しない場合、ヒューズは、呼び出し側の呼び出しに制限せずに、位置しています。

  2.吹き開状態(オープン)

    固定された時間ウィンドウ内インターフェイスコールエラーレートがON状態となり吹き閾値(哺乳類、デフォルト50%)に達し、(哺乳は、デフォルトでは10秒)。

    ブロー状態に入った後、ネットワークインタフェースを介してサービスへの後続の呼び出しは、もはやローカルフォールバックメソッドの実装を指示しません。

  3.半吹き状態(半開)

    一定期間(デフォルト哺乳類、5秒)のためにブローオープン状態に入った後、それは半ヒューズ溶断状態になります。いわゆるハーフヒューズは、サービスコールを復元しようとすることです、

    サービスおよびモニタコール成功率のinvoke限られたトラフィックを許可します。成功率が期待されている場合は、そのサービスが吹き飛ばさに復元されました。成功率は依然として非常に低い場合、再度入力してください吹き飛ばさ。

以下のように三つの状態の関係を変換します:

 

 

 

4、SpringBootプロジェクトの統合Hystrixヒューズ技術

Hystrix依存性を追加します。  

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency> 

添加yml配置

# Hystrix settings
hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: THREAD
          thread:
            # 线程超时15秒,调用Fallback方法
            timeoutInMilliseconds: 15000
      metrics:
        rollingStats:
          timeInMilliseconds: 15000
      circuitBreaker:
        # 10秒内出现3个以上请求(已临近阀值),并且出错率在50%以上,开启断路器.断开服务,调用Fallback方法
        requestVolumeThreshold: 3
        sleepWindowInMilliseconds: 10000

添加熔断配置类

package com.lmq.configuration;

import com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect;
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 熔断配置
 */
@Configuration
public class HystrixConfiguration {

    @Bean
    public HystrixCommandAspect hystrixAspect() {
        return new HystrixCommandAspect();
    }

    @Bean
    public ServletRegistrationBean getServlet() {
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/actuator/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
}

至此就算是把Hystrix集成进项目了,下面看具体使用

@RestController
@RequestMapping(value = "/webservice", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@DefaultProperties(defaultFallback = "timeOutError")
public class WebServiceController {

    /**
     * 该方法是对接口调用超时的处理方法
     */
    public String timeOutError() {
        return "time out";
    }

    @GetMapping(value = "test") 
   public String getDate() {
    
return "success";
  }

只需要在Controller层添加@DefaultProperties注解,defaultFallback为服务失败后默认调用的方法,这里直接返回time out,具体可根据业务需求返回指定数据实现服务降级。

 

おすすめ

転載: www.cnblogs.com/lmqblogs/p/11984057.html