springCloud配置Feign客戶端及熔斷器Hytrix(踩坑)

  • 引入依賴:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  • 在啓動類上加入@EnbaleFeignClients
  • 在配置文件中加入以下配置開啓feign的hytrix功能(默認是關閉的,注意:這個配置是單獨一級的,不能配置在spring.cloud下面
feign:
  hystrix:
    enabled: true
  • 新建一個FeignClient接口以調用其它服務:
@FeignClient(value="tzg-service-business",fallback = BusinessHystric.class )//value表示要調用的服務名,fallback表示熔斷處理類
public interface BusinessMirco {
    //表示要掉用的服務的api,value和該api的url保持一致,特別注意要有@RequestParam,否則會出錯!
    @GetMapping(value =  "/" + GlobalConfigVar.VERSION +"/business/school/get_list")
    MsgResponse<String> getList(@RequestParam GetSchoolListParam param);

}
  • 新建一個熔斷處理類(要繼承FeignClient接口,並注入spring):
@Component
public class BusinessHystric implements BusinessMirco {
    //feign接口的具體熔斷方法
    @Override
    public MsgResponse getList(GetSchoolListParam param) {
        return new MsgResponse().failure(-1,"服務器走神了");
    }

}
  • 再寫個測試controller方法
@GetMapping("/testFeign")
public Object testFeign(){
    GetSchoolListParam listParam=new GetSchoolListParam();
    listParam.setCity_id(1);
    return  business.getList(listParam);//business爲BusinessMirco實例;
}
  • 測試:啓動本服務,調用的服務不開啓

2019/07/26追加:在實際使用中咱們可能碰到使用Get方式請求其參數是對象時——服務端接口接收不到對象的狀況;spring

此時有兩種辦法:一是將對象拆解出來,一個個傳參數;緣由:get原理實際上是拼接的一個一個參數發送給服務端,而後映射到對象的屬性值;因此若是feign                              消費端中直接傳一個對象服務端是接收不到的;api

                          二是將服務端接口改爲post方式結合@RequestBody便可傳遞對象參數:服務器

相關文章
相關標籤/搜索