Feign与Ribbon

本文详细介绍了Feign作为声明式HTTP客户端的工作原理,包括如何通过注解简化REST调用,以及Feign与Ribbon的集成。内容涵盖@EnableFeignClients注解的作用,@FeignClient的使用,FeignClientFactoryBean的创建过程,以及Feign和Ribbon的默认配置,特别是对重试机制的分析。
摘要由CSDN通过智能技术生成

feign是一个声明式的HTTP客户端,spring-cloud-openfeign将feign集成到spring boot中,在接口上通过注解声明Rest协议,将http调用转换为接口方法的调用,使得客户端调用http服务更加简单。

Fegin

1.fegin的默认超时时间为1s,默认不开启hystrix,默认开启ribbon启用轮询规则(RoundRobinRule);
2.对于开启啦hystrix和ribbon的feign ,ribbon的超时不会抛出异常,hystrix与feign谁小听谁的;

原理分析

@EnableFeignClients 注解声明客户端接口

(@EnableFeignClients的参数声明客户端接口的位置和默认的配置类。)

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients {
	//basePackages的别名
	String[] value() default {};
	//声明基础包,spring boot启动后,会扫描该包下被@FeignClient注解的接口
	String[] basePackages() default {};
	//声明基础包的类,通过该类声明基础包
	Class<?>[] basePackageClasses() default {};
	//默认配置类
	Class<?>[] defaultConfiguration() default {};
	//直接声明的客户端接口类
	Class<?>[] clients() default {};
}

@FeignClient注解,将接口声明为Feign客户端

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {

	@AliasFor("name")
	String value() default "";
	//名称,对应与eureka上注册的应用名
	@AliasFor("value")
	String name() default "";
	//生成spring bean的qualifier
	String qualifier() default "";
	//http服务的url
	String url() default "";
	boolean decode404() default false;
	//配置类,这里设置的配置类是Spring Configuration,将会在FeignContext中创建内部声明的Bean,用于不同的客户端进行隔离
	Class<?>[] configuration() default {};
	//声明hystrix调用失败后的方法
	Class<?> fallback() default void.class;
	Class<?> fallbackFactory() default void.class;
	String path() default "";
}
FeignClientsRegistrar 注册客户端

@EnableFeignClients注解上被注解了@Import(FeignClientsReg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ripley_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值