您好,登錄后才能下訂單哦!
spring cloud分布式中,熔斷器就是斷路器,其實都是一個意思。
為什么要使用熔斷器呢?
在分布式中,我們會根據業務或功能將項目拆分為多個服務單元,各個服務單元之間通過服務注冊和訂閱的方式相互依賴和調用功能,隨著項目和業務的不斷拓展,服務單元數量也逐漸增多,相互之間的依賴關系也越來越復雜,這時候,可能會某個服務單元出現問題或網絡原因依賴調用出錯或延遲,此時如果調用該依賴的請求不斷增加,那么要調用該服務的服務將都會等待或者出現故障,如果后續連鎖反應越來越多,Servlet容器的線程資源會被消耗完畢,導致服務癱瘓。服務與服務的依賴會導致服務之間的故障傳播,從而迎來“雪崩效應“。為了解決這種每個點或多個點的故障,就有了熔斷器的出現。
什么是熔斷器?
熔斷器就相當于電路中的保險絲、保護器,它可以實現快速失敗,如果它在某一段時間里偵測到許多類似的錯誤,它將不再訪問遠程服務器,會強迫以后的訪問都會快速失敗,從而防止某個服務不斷地嘗試執行可能會失敗的操作,它會使服務繼續執行而不用等待修正錯誤,或者浪費CPU時間去等到長時間的超時產生,從而進入回路方法。熔斷器也可以使服務能夠診斷錯誤是否已經修正,如果已經修正,服務會再次嘗試調用操作。
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,要注意回路方法返回值,參數要與原方法一致
在被調用方的方法中制造故障:
3.在調用方的啟動類加注解@EnableCircuitBreaker啟動熔斷器
啟動:
可以看到進入了回路方法
當然還可以在調用方進行配置:
hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 2000 #請求響應時間 如果過了這個時間就會進入回路方法 circuitBreaker: requestVolumeThreshold: 2 # 服務降級:此請求連續多少次響應過慢或崩潰 系統就默認把它當成一個崩潰的方法 在一定時間內調用此方法會直接進入回路方法 這樣執行更快 默認值是20 請求該方法20次 如果崩潰或響應過慢率大于百分之八十 就會默認它是一個崩潰方法 #timeout: #enabled: false #取消超時檢查 無論線程運行多久 只要不崩潰就不進入回路方法 一般情況不使用
配置完后運行:
運行好幾次發現它會前兩次會訪問并等待相應結果,后面不再訪問就直接回應結果進入回路方法
當然這是根據配置:
spring cloud熔斷器就說到這里,想了解spring cloud其他內容,請瀏覽我以前博客
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。