91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

詳解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

平乡县| 堆龙德庆县| 江口县| 柘城县| 石狮市| 黄梅县| 札达县| 恩施市| 襄垣县| 正镶白旗| 高青县| 辽源市| 井陉县| 喜德县| 龙口市| 天全县| 荣成市| 屯门区| 临武县| 嘉义市| 方山县| 浮梁县| 云浮市| 棋牌| 朔州市| 丰顺县| 札达县| 织金县| 天全县| 雅安市| 和平县| 即墨市| 新泰市| 和林格尔县| 额济纳旗| 修武县| 利辛县| 奉贤区| 苏尼特左旗| 广宗县| 宜川县|