首先先创建一个FeignConfig类,代码如下:

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)的异常,

如果你要使用@RequestMapping这个注解你就把feignContract这个方法注释掉,就好了。

第二个bean配置的是是禁用Hystrix

接着Feign调用User服务的接口类UserInterface中的@FeignClient注解中添加configuration = FeignConfig.class就可以吧我们上面的config加载进来,我这里就直接把这个类贴出来了

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属性中返回了,如果调用服务异常的话页面的结果如下:

完整源码在https://github.com/OnlyXingxing/SpringCloud

最新文章

  1. idea maven scala
  2. jQuery 操作 CSS
  3. Java产生随机数
  4. 解决redhat的未注册问题
  5. centos 5.8 64位系统安装 mysql5.6
  6. Sqli-labs less 51
  7. [Bootstrap] 1. container &amp; container-fluid
  8. protel dxp快捷键大全
  9. 学校作业-Usaco DP水题
  10. 如何设置Java虚拟机内存以适应大程序的装载
  11. 一篇知乎的故事 - javascript技术贴
  12. WebLogic重启
  13. 【转】Python爬取AES加密的m3u8视频流的小电影并转换成mp4
  14. Python turtle学习笔记
  15. [Python设计模式] 第23章 烤串的哲学——命令模式
  16. 【转】 Linux常用文件操作命令
  17. JS简单表单验证
  18. Kafka消息存储原理
  19. Unity关闭shader中的光照模型以及如何自定义光照模型
  20. 移动端H5适配方法(盒子+图片+文字)

热门文章

  1. linux---postgresql的安装和配置
  2. 调整Winfrom控件WebBrowser的默认浏览器内核版本
  3. 配置本机的yum源
  4. 06.yield
  5. anaconda3创建py2环境
  6. range类型(Python)
  7. docker 运行jenkins及vue项目与springboot项目(四.docker运行nginx)
  8. 每天一个linux命令:mv(7)
  9. BlueStore-先进的用户态文件系统《二》-BlueFS
  10. POJ 3278 Catch That Cow (有思路有细节的bfs)