【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入职半年了