基于Feigh在微服务中发送Http请求,替代RestTemplate
Feigh的重点是免去了微服务中,每次要使用RestTemplate构建Http请求,转而采用了接口调用的形式来调用其他微服务
下载依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
需要在发起服务请求的启动类上开启配置,Feigh默认自带负载均衡配置
@SpringBootApplication
@EnableFeignClients
//如果将Feign的功能抽离出来,放在了一个不同的包中,进行Maven引入,那么@EnableFeignClients将会扫描不到,那么我们可以用以下两种方式
//@EnableFeignClients(clients = UserClients.class) //clients可以等于一个数组,里面放需要用到的所有Feign模块中的class
//@EnableFeignClients(basePackages = "com.cyk.feign") //将整个包的所有类全部导入
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
新建一个接口
@FeignClient("userservice")//提供者的服务名
public interface UserClients {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
直接使用即可
@Autowired
private UserClients userClients;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId); //忽略,和知识点无关
order.setUser(userClients.findById(order.getUserId()));
return order;
}
Feigh默认客户端的实现,是不支持连接池的,所以我们要更改底层客户端的实现方式,来增加性能。可以用Apache旗下的Httpclient
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
配置文件
feign:
httpclient:
enabled: true #开启HttpClient支持
max-connections: 200 #最大连接数
max-connections-per-route: 50 #每个路径的最大连接数