【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配合使用)等机制

你可能感兴趣的:(SpringCloud,spring,cloud,java,okhttp)