前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >OpenFeign入门

OpenFeign入门

原创
作者头像
用户3293499
修改2024-10-09 13:58:37
修改2024-10-09 13:58:37
1290
举报
文章被收录于专栏:微服务微服务

引入启动

在配置类中加入@EnableFeignClients注解,该注解引入相关类FeignClientsRegistrar,通过此类进行客户端@FeignClient注册;@FeignClient注解放在接口类中。

配置

配置

说明

feign.circuitbreaker.enabled=true

启用熔断器

feign.compression.request或者response.enabled

请求压缩

feign.client.config.default.logger-level = full

配置日志,其中default可以修改为具体的client name

日志配置

feign的日志级别有:

NONE, 默认没有

BASIC, 记录方法、路径、响应状态、执行时间

HEADERS, 比BASIC多HEADER信息

FULL, header信息, 请求body, requests 和 responses元信息

可以在配置文件中配置,也可以通过代码配置

代码语言:java
复制
@Configuration
public class FooConfiguration {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

熔断器

1、配置@FeignClient中的fallback参数,fallback需要注册为bean

代码语言:java
复制
@FeignClient(name="provider",fallback=UserServiceCallback.class)
public interface UserService {
	
	@RequestMapping(method = RequestMethod.GET, value = "/appone/home/")
	public String addUser(@RequestParam String userid,@RequestParam String pwd,@RequestParam String say);
	
	@RequestMapping(method = RequestMethod.GET, value = "/appone/home/")
	public String delUser(@RequestParam String userid,@RequestParam String say);
	
	@RequestMapping(method = RequestMethod.GET, value = "/appone/home/")
	public String getUer(@RequestParam String userid,@RequestParam String say);
	
	@RequestMapping(method = RequestMethod.GET, value = "/appone/home/allLogs/")
	public Object allLogs(@RequestParam PageInfo pg,@RequestParam String title);
	
	@RequestMapping(method = RequestMethod.POST, value = "/appone/home/delLog")
	public ResponseMessage<Object> delLog(String id);
	
}

@Component
public class UserServiceCallback implements UserService {
	
	Logger logger = LoggerFactory.getLogger(getClass());

	@Override
	public String addUser(String userid, String pwd, String say) {
		return null;
	}

	@Override
	public String delUser(String userid, String say) {
		return null;
	}

	@Override
	public String getUer(String userid, String say) {
		return null;
	}

	@Override
	public Object allLogs(PageInfo pg, String title) {
		throw new NoFallbackAvailableException("Boom!", new RuntimeException());
	}

	@Override
	public ResponseMessage<Object> delLog(String id) {
		throw new NoFallbackAvailableException("Boom!", new RuntimeException());
	}
	
}

2、若要知道具体断路的原因,则需要fallbackFactory参数,也需要配置为bean

拦截器

拦截器用于拦截请求,可以增加认证参数

1、继承RequestInterceptor

代码语言:java
复制
public interface RequestInterceptor {

  /**
   * Called for every request. Add data using methods on the supplied {@link RequestTemplate}.
   */
  void apply(RequestTemplate template);
}

public class MyInterceptor implements RequestInterceptor
{
    @Override
    public void apply(RequestTemplate template)
    {

    }
}

2、注册

2.1 直接注册为bean

增加 @Component 或者 @Bean 注解

2.2 通过配置

feign.client.config.服务名.requestInterceptors0: com.xxx.xx

2.3 通过configuration

指定配置

原理

FeignClientsRegistrar继承了ImportBeanDefinitionRegistrar

代码语言:java
复制
class FeignClientsRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware {

    @Override
	public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
        /// 注册默认的配置
		registerDefaultConfiguration(metadata, registry);
        /// 注册 @FeignClient 注解的类,并使用JDK动态代理(所以要求client必须是接口)
		registerFeignClients(metadata, registry);
	}
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入启动
  • 配置
    • 日志配置
    • 熔断器
    • 拦截器
  • 原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档