基于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 #每个路径的最大连接数
posted @ 2023-12-24 16:53  凌碎瞳缘  阅读(12)  评论(0编辑  收藏  举报