【SpringCloud】OpenFeign调用第三方接口API
前言
本章主要总结使用Openfeign声明式接口编程快速实现远程第三方法系统接口的调用,简化代码逻辑,提高代码质量,从而提高工作效率。
一、导入jar包依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
二、定义客户端接口
-
定义请求参数模型 注意:参数名称和类型需要与服务端提供的接口保持一致
@Data
public class OrderDTO {
@JsonProperty("order-id")
private String orderId;
@JsonProperty("order-name")
private String orderName;
public static OrderDTO of(String id){
OrderDTO dto = new OrderDTO();
dto.setOrderId(id);
return dto;
}
}
-
定义远程接口 注意:接口请求方法与提供接口保持一致,其中接口类上的url为第三方系统的端点
@FeignClient(name = "Order",url = "http://localhost:8123")
public interface OrderClientService {
@PostMapping("/api/order/create")
String createOrder(OrderDTO dto);
}
三、远程接口使用
@RestController
@RequestMapping("api/test")
public class TestController {
// 就像使用本地接口一样,直接依赖注入
@Autowired
OrderClientService clientService;
@PostMapping("/create")
public String create(){
OrderDTO dto = OrderDTO.of("1");
dto.setOrderName("订单名称")
String order = clientService.createOrder(dto);
return "下单成功" + order;
}
}
四、修改http请求实现
说明:Openfeign默认HttpConnectionURL,性能比较低,所以需要切换为OKHttp
-
引入feign-okhttp依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
-
application.yml中启用okhttp
feign:
httpclient:
connection-timeout: 5000
max-connections: 1000
okhttp:
enabled: true
五、配置日志级别
OpenFeign包含四种不同的级别:NONE、BASIC、HEADERS、FULL。
-
NONE:不记录任何日志信息,这是默认值。 BASIC:仅记录请求的方法,URL以及响应状态码和执行时间 HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息 FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
代码中配置实现
feign:
httpclient:
connection-timeout: 5000
max-connections: 1000
okhttp:
enabled: true
client:
config:
# default是全局配置
default:
logger-level: BASIC
# 针对某个微服务的配置
orderservice:
logger-level: FULL
总结
-
日志级别尽量用BASIC或None 使用 HttpClient 或 OKHttp 代替 URLConnection提高性能,并设置连接池参数 OpenFeign还支持请求参数、响应结果编码,失败重试(需要与Ribbon配合使用)等机制
下一篇:
西安华为OD入职半年了
