OpenFeign
OpenFeign是一个声明式的http客户端
快速入门
①:引入依赖
<!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
②:通过@EnableFeignClients注解,启用OpenFeign功能
@EnableFeignClients
@SpringBootApplication
public class CartApplication{}
③:编写FeignClient
@FeignClient(value = "item-service") //服务名称
public interface ItemClient {@GetMapping("/items") //请求方式和请求路径List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
④:使用FeignClient,实现远程调用
List<ItemDTO> items = itemClient.queryItemByIds(itemIds);
*原来的写法
List<ServiceInstance> instances = discoveryClient.getInstances("item-service");if(CollUtils.isEmpty(instances)){return;}//2.2 手写负载均衡,从服务列表中挑选一个实例ServiceInstance instance = instances.get(RandomUtil.randomInt(instances.size()));//2.3 利用RestTemplate发起http请求,得到http响应ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(instance.getUri() + "/items?ids={ids}",HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtils.join(itemIds, ",")));
连接池
Feign底层发起http请求,依赖于其它的框架。其底层支持的http客户端实现包括:
-
HttpURLConnection:默认实现,不支持连接池
-
Apache HttpClient :支持连接池
-
OKHttp:支持连接池
①:导入依赖
<!--OK http 的依赖 -->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId>
</dependency>
②:配置文件中开启Feign的连接池功能
feign:okhttp:enabled: true # 开启OKHttp功能