Feign远程调用
# Feign远程调用
声明式http客户端,可以实现http请求发送。具有负载均衡功能,底层依赖于Ribbon
# 1.安装使用
- 添加maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1
2
3
4
2
3
4
- 在启动类上开启注解功能@EnableFeignClients
- 声明一个接口,这个接口不用我们去实现,使用时直接自动注入使用
@FeignClient("uservice") //对应服务提供者的服务名称
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable Long id);
}
1
2
3
4
5
2
3
4
5
除此之外Feign可以自定义配置日志级别,显示http的请求和应答信息。
# 2.性能优化
- 日志接别设置为Basic或者None
- 使用连接池代替默认的URLConnection(Apache HttpClient或者OKHttp)
# 3.最佳实践
方式一:消费者发送FeignHttp请求和提供者controller的处理方法两者接口是一致的,那么可以统一给消费者的UserClient和提供者UserController提供统一接口去继承和实现。
问题:紧耦合,同时父接口参数映射不能被继承。
方式二:将FeignClient抽取为独立模块,把FeignClient、POJO、Feign默认配置都定义到一个项目中,供所有消费者使用,调用还是通过消费者调用。消费者服务中仅仅保留order服务相关的代码,关于user的实体类、HttpClient的声明全部都抽取挪到一个项目或者模块。
问题:当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用。有两种方式解决。
@EnableFeignClients(basePackages = "cn.itcast.feign.clients")
@EnableFeignClients(clients = {UserClient.class})
1
2
2
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57