首先先建立一個FeignConfig類,代碼以下:git
package com.xing.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import feign.Contract; import feign.Feign; @Configuration public class FeignConfig { //配置是在FeignClient中的接口中使用Feign自帶的註解 @Bean public Contract feignContract(){ return new feign.Contract.Default(); } //禁用Hystrix @Bean @Scope("prototype") public Feign.Builder feignBuilder() { return Feign.builder(); } }
第一個bean配置的是使用Feign的默認註解,添加第一個配置以後,下面的UserInterface類就必定要使用@RequestLine這個註解才行(這個是Feign的註解),使用@RequestMapping會報Method findByNameEn not annotated with HTTP method type (ex. GET, POST)的異常,github
若是你要使用@RequestMapping這個註解你就把feignContract這個方法註釋掉,就行了。web
第二個bean配置的是是禁用Hystrixspring
接着Feign調用User服務的接口類UserInterface中的@FeignClient註解中添加configuration = FeignConfig.class就能夠吧咱們上面的config加載進來,我這裏就直接把這個類貼出來了app
package com.xing.movie.FeignInteface; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.xing.config.FeignConfig; import com.xing.movie.entity.User; import feign.Param; import feign.RequestLine; import feign.hystrix.FallbackFactory; //@FeignClient中的fallback和fallbackFactory不能一塊兒使用 @FeignClient(name = "xing-user" ,/*fallback = UserInterfaceFallback.class,*/configuration = FeignConfig.class , fallbackFactory = HystrixClientFallbackFactory.class)//服務名 public interface UserInterface { //@RequestMapping(value ="/user/findByNameEn/{nameEn}" ,method =RequestMethod.GET ) //必須使用RequestMapper,使用GetMapping啓動報錯 @RequestLine("GET /user/findByNameEn/{nameEn}") //當配置了feignContract以後要使用這個Feign的註解,使用上面的報錯,若是配置了這個,那下面方法裏面必須使用@Param不能使用@PathVariable public User findByNameEn(@Param("nameEn") String nameEn);//@Param後面須要指定nameEn,否則可能報錯 } //不必定要內部類能夠是外部類 //Hystrix異常處理類 ,返回空的user @Component class UserInterfaceFallback implements UserInterface { @Override public User findByNameEn(String nameEn) { User user = new User(); user.setName(""); user.setNameEn(""); user.setId(0); return user; } } //Hystrix 訪問異常時能夠顯示錯誤信息 @Component class HystrixClientFallbackFactory implements FallbackFactory<UserInterface> { @Override public UserInterface create(Throwable cause) { return new UserInterface() { @Override public User findByNameEn(String nameEn) { return new User("fallback;reason was : "+cause.getMessage(), " ", 0); } }; } }
這樣就能夠禁用掉Feign的Hystrix,測試成功,我這裏額外配置fallback 和fallbackFactory 這兩個方法是配置了當Feign調用異常的時候fallback方法是返回一個空的user,而fallbackFactory方法能夠打印異常信息我把異常信息放在User類的name屬性中返回了,若是調用服務異常的話頁面的結果以下:ide
完整源碼在https://github.com/OnlyXingxing/SpringCloud測試