在Feign中添加自定义配置
首先先创建一个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
在Feign中添加自定义配置的更多相关文章
- springboot2.0application.在yml文件中添加自定义配置
1. 在application.yml文件中添加自定义配置 app: platform: version: code: '1.0.0' 2. 定义bean类 具体格式: 其中的成员变量名称需要与配 ...
- feign中的hytrix和turbin配置
这里我用了两个生产者和两个消费者进行演示,如下图(画的不好看,凑活看看): 这里我就只讲下怎么注册到dashbord和相关的配置,提供者和消费者等代码可以去下载查看: https://github.c ...
- 在Web.config或App.config中的添加自定义配置
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍 ...
- 在Web.config或App.config中的添加自定义配置 <转>
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置 ...
- Feign中使用hystrix
Feign中使用hystrix 一.在Order工程中的bootstrap.yml中增加配置 feign: hystrix: enabled: true
- Feign自定义编程配置
介绍 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feigh默认使用的编码器.解码器.所使用的契约等.Spring Cloud允 ...
- feign三:覆写feign的默认配置及feign的日志
feign三:覆写feign的默认配置及feign的日志 默认配置复写 本项目地址:http://192.168.1.103:7601 本例是通过feign调用 eureka项目中的/eureka/a ...
- Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题【转】
Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题 http://blog.didispace.com/Spring-Boot-And-Feign- ...
- Springcloud 中 SpringBoot 配置全集 (收藏版)
Springcloud 中 SpringBoot 配置全集 (收藏版) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群 ...
随机推荐
- postman使用之四:设置读取变量和切换环境
postman提供了environment管理功能,想要在多个环境中测试,比如在测试环境.灰度环境.生产环境等,只需要用同样的接口,切换下环境即可,非常方便.具体步骤: 设置环境变量 1.点击man ...
- sql 根据身份证判断年龄是否小于18岁
SELECT *, Age= datediff(yy,cast(case when substring(PersonalId,,) ') /*若第7位不是'1'或'2'则表示是15位身份证编码规则*/ ...
- zxing opencv
- 前端学习(二十六)移动端s(笔记)
===================================================弹性布局rem布局---------------------------------------- ...
- SQL笔试题:下面是学生表(student)的结构说明
SQL笔试题:下面是学生表(student)的结构说明 SQL笔试题:下面是学生表(student)的结构说明 字段名称 字段解释 字段类型 字段长度 约束 s_id 学号 字符 10 PK s_na ...
- qt学习(二):启动画面
打开一个软件,都会有启动画面. 现在去体验如何实现启动画面:输入图,装载,延时,下一张主部件图 在main.Cpp中实现启动时桌面图片. #include <QtGui/QApplication ...
- paper 143:人脸验证
持续更新ing,敬请期待! 参考:http://blog.csdn.net/stdcoutzyx/article/details/42091205 1. DeepID人脸识别算法 香港中文大学的团队 ...
- 【Java架构:基础技术】一篇文章搞掂:Spring Boot 官方文档解读
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文内容大部分是翻译和总结官方文档,可以到https://docs.spring.io/spring-boot/docs查看(此地 ...
- P3203 [HNOI2010]弹飞绵羊(LCT)
弹飞绵羊 题目传送门 解题思路 LCT. 将每个节点的权值设为\(1\),连接\(i\)和\(i+ki\),被弹飞就连上\(n\),维护权值和\(sum[]\).从\(j\)弹飞需要的次数就是\(sp ...
- 字母加密-C基础
输入一个英文小写字符和正整数k(k<26),将英文字母加密并输出.加密思想:将每个字母c加一个序数k, 即用它后面的第k个字母代替,变换公式:c = c + k.如果字母为z,则后一个字母是a, ...