Spring Cloud OpenFeign

Spring Cloud OpenFeign整合了Spring Cloud Ribbon、Spring Cloud Hystrix,同时还实现重试机制。

maven依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

例子

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {

    public static void main(String[] args){
        SpringApplication.run(ConsumerApplication.class, args);
    }
}
@FeignClient(value = "hello-service")
public interface HelloWorld {

    @RequestMapping("/hello")
    String remoteSayHello();

    @PostMapping("/printAddr")
    String remotePrintAddr(@RequestParam("province") String provinceName, @RequestParam("city") Long cityName);

    @GetMapping("/get-one-student/{id}")
    StudentBO remoteGetStudent(@PathVariable("id") Long id);
}
@RestController
public class ConsumerController {

    @Autowired
    private HelloWorld helloWorld;

    @GetMapping(value="/remoteSayHello")
    public String remoteSayHello() {
        return helloWorld.remoteSayHello();
    }
}

使用@EnableFeignClients 开启Spring Cloud OpenFeign
使用@FeignClient 声明服务

@FeignClient的常用属性
value: 指定服务名,不区分大小写
path: 指定请求路径的前缀
url: 指定请求的绝对路径,不会使用负载均衡,直连,本地调试时或其它不需要负载均衡的场景下可使用
configuration: 为单个服务指定配置(注:当同一个服务有多个FeignClient时,configuration配置可能无法生效,需要注意版本)

FeignClientsConfiguration 是Feign默认的全局配置

 	@Bean
	@ConditionalOnMissingBean
	public Retryer feignRetryer() {
		return Retryer.NEVER_RETRY;
	}

默认不进行重试

底层支持 HttpURLConnection 、HttpClient、OkHttp 三种
默认为HttpURLConnection 其中 connectTimeoutMillis默认为10s readTimeoutMillis 默认为60s
可通过下列方式修改默认值

@Bean
public Requst.Options options(){
	Request.Options options = new Request.Options(10000, 60000);
	return options;
}

若需要使用HttpClient、OkHttp 则需要导入相应的依赖
httpClient maven依赖

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>

feign.httpclient.enabled 表示开启HttpClient的支持 当该属性不存在或属性值为true时为开启

okHttp maven依赖

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
</dependency>

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
</dependency>

feign.okhttp.enabled 表示开启OkHttp的支持 当该属性值为true时为开启

主要类
org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration
org.springframework.cloud.openfeign.FeignClientsConfiguration
org.springframework.cloud.openfeign.FeignAutoConfiguration
org.springframework.cloud.openfeign.FeignClientsRegistrar

FeignRibbonClientAutoConfiguration 会在FeignAutoConfiguration 前执行
当存在ILoadBalancer时会创建带负载均衡的FeignClient

@ConditionalOnClass({ ILoadBalancer.class, Feign.class })
@Configuration
@AutoConfigureBefore(FeignAutoConfiguration.class)
@EnableConfigurationProperties({ FeignHttpClientProperties.class })
//Order is important here, last should be the default, first should be optional
@Import({ HttpClientFeignLoadBalancedConfiguration.class,
		OkHttpFeignLoadBalancedConfiguration.class,
		DefaultFeignLoadBalancedConfiguration.class })
public class FeignRibbonClientAutoConfiguration {
	//...
}

使用案例
Spring Cloud OpenFeign 入参对象、返回值对象 无需和提供者一致
Spring Cloud OpenFeign 文件上传

Spring Cloud OpenFeign 3.1.0 官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值