SpringCloud -- Hystrix 熔斷機制實現(基於 Ribbon、Feign)
阿新 • • 發佈:2018-11-22
一、基於 Ribbon + Hystrix
在入口類 中 加上@EnableHystrix //表示載入熔斷器功能
package com.springcloud.ribbon; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; /** * 本例中使用Eureka服務中心所以用@EnableEurekaClient * 如果註冊中心是zookeeper或其它,建議使用@EnableDiscoveryClient **/ @SpringBootApplication @EnableEurekaClient @EnableHystrix //表示載入熔斷器功能 public class RibbonApplication { public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); } //宣告RestTemplate並新增@Bean和@LoadBalanced, @LoadBalance表示支援Ribbon的負載均衡。 @LoadBalanced @Bean RestTemplate restTemplate() { return new RestTemplate(); } }
修改service層 增加
@HystrixCommand(fallbackMethod = "errCallBack") //被呼叫服務出現異常時,執行回撥函式
package com.springcloud.ribbon.service; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; /** * Created by joe強 on 2018/9/27 20:01 */ @Service public class HelloService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "errCallBack") //被呼叫服務出現異常時,執行回撥函式 public String doSomething(String parm){ String result; result=restTemplate.getForObject("http://server1/ribbon?parm="+parm,String.class);//呼叫server1客戶端 de ribbon介面 System.out.println(result); return result; } /** * 回撥函式 返回值型別和原函式相同 * 回撥函式引數型別和原函式相同 * @param parm * @return */ public String errCallBack(String parm){ return "Sorry,"+parm+",server1 not responde"; } }
啟動Ribbon服務 和 server1 ,呼叫介面
此時 介面呼叫沒有問題 ,現在 關閉server1 服務,再次呼叫介面:
呼叫發生異常時,熔斷機制生效了!
二、Feign +Hystrix
第一步:首先開啟Feign對Hystrix的支援,在properties檔案中新增以下配置:
feign.hystrix.enabled=true.
第二部 修改 Server1Service 介面
新增Server1Service實現類:
package com.springcloud.feign.service; import org.springframework.stereotype.Component; /** * Created by joe強 on 2018/9/28 15:34 */ @Component public class Server1ServiceImpl implements Server1Service { @Override public String callribbonByFegin(String parm) { //引數不需要@RequestParm return "Sorry," + parm + "server1 not responde"; } }
啟動 Feign服務,此時 開啟server1 客戶端,呼叫介面:
呼叫沒有任何問題,此時關閉server1 客戶端 再次呼叫介面:
發生異常,熔斷機制生效!