本文参考博客
SpringCloud(四)-手把手教你使用OpenFeign - 简书
仅在此基础稍作修改和添加一些踩过的坑
1. OpenFeign简介
OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。
2. 配置OpenFeign
2.1 配置pom.xml
<!-- openfeign依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2.2 主启动类加上注解@EnableFeignClients注解
@EnableFeignClients申明该项目是Feign客户端,扫描对应的feign client。
(即为调用方主启动类加上注解@EnableFeignClients注解)
2.3 新增提供者API接口
在服务调用者方,编写声明远程调用服务的接口,并添加@FeignClient(name="customer-server")注解,name就是我们要访问的微服务的名称,这个注解是及其重要的,表明了远程调用的服务。方法quoteIdentity中@RequestMapping(value="/mutual/quoteIdentity")和服务提供者的接口路径一致(下图)。
2.4服务调用者方同样需要写Controller层,调用2.3service层提供的接口
2.5解决超时问题
openfeign超时默认1秒钟
openfeign底层自动引入ribbon,所以超时由ribbon控制
在消费端yml里面配置如下,5000为5秒,这样消费端会等待5秒才会报错
connecttimeout 响应超时设置---找到接口的时间
readtimeout 请求超时设置---接口可用返回值处理的时间
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
但是有时不管用,就用下面的配置
feign:
client:
config:
default:
connectTimeout: 1000
readTimeout: 2000
注意,此配置在一级目录下,和spring平级,可直接加在yml文件最后
default表示全局默认的超时时间,如果只针对某一个服务的调用进行设置,这里应该是服务名