问题
在SpringBoot中简单集成Feign,不想使用Rest Temple了。
步骤
Maven
<properties>
<spring.cloud-version>2022.0.1</spring.cloud-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
application.yml
logging:
level:
com:
xxx:
xxx:
xxx:
xxxxClient: DEBUG
spring:
cloud:
openfeign:
autoconfiguration:
jackson:
enabled: true
okhttp:
enabled: true
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: full
xxxxClient:
url: https://api.xxxx.xxxx.com
这里启用了jackson,作为feign的序列化和反序列化解析器;启用了okhttp,默认是没有启用的;连接等待超时时间5秒;读取连接超时时间5秒;日志全部记录下来。xxxxClient为feign中被定义客户端名称。
注意:OpenFeign
loggerLevel
值,依赖Spring的日志配置,即
logging.level.com.xxx.xxx.xxx.xxxxClient
。
Spring
Application.java
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
xxxxClient.java
@FeignClient("xxxxClient")
public interface xxxxClient {
@GetMapping(path = "/demo/${xxx.id}")
ResVo demoEndpoint();
}
这里主要就是一个Get请求,调用远端服务。注意:
@FeignClient("xxxxClient")
里面的客户端名称,必须与application.yml文件中保存一致;还有一个点值得关注就是请求路径中的
${xxx.id}
是读取配置文件中的配置的相关值,类似如下:
xxx:
id: 你的配置值
测试
下面是在Spring中尝试使用feign的日志输出:
总结
OpenFeign相比RestTemplate,还是少关心一些事情,例如:不太操心超时的实现,而且,更加容易解决Service的概念。OpenFeign与RestTemplate的对比有点像JdbcTemplate与MyBaits的对比。
参考:
- 1.3. Timeout Handling
- Appendix A: Common application properties
- Feign Logging Configuration