中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解spring cloud分布式關于熔斷器

發布時間:2020-10-21 15:28:20 來源:腳本之家 閱讀:119 作者:it飛 欄目:編程語言

spring cloud分布式中,熔斷器就是斷路器,其實都是一個意思。

為什么要使用熔斷器呢?

在分布式中,我們會根據業務或功能將項目拆分為多個服務單元,各個服務單元之間通過服務注冊和訂閱的方式相互依賴和調用功能,隨著項目和業務的不斷拓展,服務單元數量也逐漸增多,相互之間的依賴關系也越來越復雜,這時候,可能會某個服務單元出現問題或網絡原因依賴調用出錯或延遲,此時如果調用該依賴的請求不斷增加,那么要調用該服務的服務將都會等待或者出現故障,如果后續連鎖反應越來越多,Servlet容器的線程資源會被消耗完畢,導致服務癱瘓。服務與服務的依賴會導致服務之間的故障傳播,從而迎來“雪崩效應“。為了解決這種每個點或多個點的故障,就有了熔斷器的出現。

什么是熔斷器?

熔斷器就相當于電路中的保險絲、保護器,它可以實現快速失敗,如果它在某一段時間里偵測到許多類似的錯誤,它將不再訪問遠程服務器,會強迫以后的訪問都會快速失敗,從而防止某個服務不斷地嘗試執行可能會失敗的操作,它會使服務繼續執行而不用等待修正錯誤,或者浪費CPU時間去等到長時間的超時產生,從而進入回路方法。熔斷器也可以使服務能夠診斷錯誤是否已經修正,如果已經修正,服務會再次嘗試調用操作。

詳解spring cloud分布式關于熔斷器

1.在調用服務方加入熔斷器依賴jar包:

 // https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix
  compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-hystrix'

2.在Controller中:

@Controller
//@EnableWebSecurity 安全檢查controller還要繼承extends WebSecurityConfigurerAdapter
public class PageController  {

  public static Logger logger=LoggerFactory.getLogger(PageController.class);

  @Autowired
  private RestTemplate restTemplate;


  @HystrixCommand(fallbackMethod = "toIndex1")//斷路器進入回路方法
  @RequestMapping("/toIndex1")
  public String toIndex(Model model){

    System.out.println("進入toIndex");
    logger.info("執行調用");
    String msg=restTemplate.getForEntity("http://project-solr/SolrSearch",String.class).getBody();//project-solr是調用注冊中心里的名字
    logger.info("調用結束");
    model.addAttribute("msg",msg);
    return "index";
  }

  public String toIndex1(Model model){
    System.out.println("進入回路方法");
    model.addAttribute("msg","服務不可用,請稍后重試");
    return "index";
  }
}

注意:在調用方服務Controller中的方法上加上@HystrixCommand(fallbackMethod = "回路方法")

這里我讓回路方法調用的是toIndex1,要注意回路方法返回值,參數要與原方法一致

在被調用方的方法中制造故障:

詳解spring cloud分布式關于熔斷器

3.在調用方的啟動類加注解@EnableCircuitBreaker啟動熔斷器

啟動:

詳解spring cloud分布式關于熔斷器

詳解spring cloud分布式關于熔斷器

可以看到進入了回路方法

當然還可以在調用方進行配置:

hystrix:
 command:
  default:
   execution:
   isolation:
    thread:
     timeoutInMilliseconds: 2000 #請求響應時間 如果過了這個時間就會進入回路方法
   circuitBreaker:
     requestVolumeThreshold: 2 # 服務降級:此請求連續多少次響應過慢或崩潰 系統就默認把它當成一個崩潰的方法 在一定時間內調用此方法會直接進入回路方法 這樣執行更快 默認值是20 請求該方法20次 如果崩潰或響應過慢率大于百分之八十 就會默認它是一個崩潰方法 
      #timeout:
        #enabled: false #取消超時檢查 無論線程運行多久 只要不崩潰就不進入回路方法 一般情況不使用

配置完后運行:

詳解spring cloud分布式關于熔斷器

運行好幾次發現它會前兩次會訪問并等待相應結果,后面不再訪問就直接回應結果進入回路方法

當然這是根據配置:

詳解spring cloud分布式關于熔斷器

spring cloud熔斷器就說到這里,想了解spring cloud其他內容,請瀏覽我以前博客

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铁岭市| 霍州市| 莫力| 水城县| 房产| 弥勒县| 枣庄市| 寿光市| 新乡县| 天津市| 南乐县| 咸阳市| 绥化市| 玉林市| 娱乐| 裕民县| 和平区| 吕梁市| 绥棱县| 罗源县| 永善县| 白银市| 河西区| 台中市| 泾阳县| 凤凰县| 泌阳县| 奉贤区| 黄山市| 晋城| 新龙县| 新干县| 阜阳市| 类乌齐县| 嘉禾县| 滦平县| 安宁市| 阿荣旗| 隆昌县| 景宁| 信丰县|