基于 Feign 远程调用、自定义配置、性能优化

由于 RestTemplate 方式调用存在以下问题:

  • 代码可读性差,编程体验不统一
  • 参数复杂 URL 难以维护

======> 使用 Feign 可以解决上面的问题

Feign 的介绍

Feign 是一个声明式的 HTTP 客户端,其作用就是实现 HTTP 请求的发送

定义和使用 Feign 客户端

1. 引入依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
	<version>3.1.5</version>
</dependency>

2. 在启动类添加注解开启 Feign 的功能

@EnableFeignClients
@SpringBootApplication
public class CloudDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudDemoApplication.class, args);
    }
}

3. 编写 FeignClient 接口

public interface UserAPI {
	@GetMapping("/user/{id}")
    Result getById(@PathVariable Long id);
}

@FeignClient("userservice")	# 请求服务名称
public interface UserClient extends UserAPI{}

4. 使用 FeignClient 代替 RestTemplate 实现远程调用

// 此场景为订单模块远程调用用户模块实现查询订单用户信息
@Service
public class OrderService {

    @Resource
    private OrderMapper orderMapper;
    @Resource
    private UserClient userClient;

    public Order getOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.基于 Feign 远程调用
        User user = userClient.findById(order, getUserId());
        // 3.封装 user 到 Order
        order.setUser(user);
        // 4.返回
        return order;
    }
}

自定义 Feign 的配置

Feign 运行自定义配置来覆盖默认配置,可以修改的配置如下:

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器HTTP远程调用的结果做解析,例如解析JSON字符串为JAVA对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过 HTTP 请求发送
feign.Contract支持的注解格式默认是SpringMVC的注解
feign.Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

一般我们只需要配置日志级别

Feign 的性能优化

Feign 底层的客户端实现

  • URLConnection(默认): 不支持连接池
  • Apache HttpClient: 支持连接池
  • OKHttp: 支持连接池

因此优化 Feign 的性能主要包括:

  • 使用连接池代替默认的 URLConnection
  • 日志级别最好用 BASIC 或 NONE

连接池配置

Feign 添加 HttpClient 的支持

<!--    引入依赖    -->
<dependency>
	<groupId>io.github.openfeign</groupId>
	<artifactId>feign-httpclient</artifactId>
</dependency>
# 配置日志级别
feign:
	client:
		config:
			default:	# default 全局配置
				loggerLevel: BASIC	# 日志级别
	httpclient:	# 配置连接池
	enabled: true	# 开启 feign 对 HttpClient 的支持
	max-connections: 200	# 最大的连接数
	max-connections-per-route: 50	# 每个路径的最大连接数
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ilxxChow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值