HttpClient
HttpClient是一个基于Java的Http客户端库
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://www.example.com");
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
// 处理响应
int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity);
// ...
}
RestTempale
RestTemplate是Spring框架提供的一种简单方便的HTTP访问工具,集成了HttpClient,以下是基本的使用方法:
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://www.example.com", String.class);
Feign
feign是一个Java HTTP客户端,可以使用注解来定义请求接口,将服务端的REST API转化为Java接口。Feign提供了负载均衡和容错能力。
使用步骤:
-
导入依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies>
-
配置Feign客户端
在SpringBoot项目中可以使用@EnableFeignClients注解开启,通过配置类来开启Feign的日志记录
@Configuration @EnableFeignClients(basePackages = "xxx.xxx.xxx.api") // 指定扫描的Feign客户端接口的包路径 public class FeignClientConfig { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }
-
定义Feign接口
使用注解@FeignClient定义一个Feign客户端,通过value属性指定客户端的名称,并指定服务的地址,如何使用@GetMapping等注解定义请求接口
@FeignClient(value = "service-name", url = "http://localhost:8081") // 客户端名称和目标服务地址 public interface OrderApiClient { @GetMapping("/orders/{id}") Order getOrderById(@PathVariable("id") Long id); }
-
调用Feign接口
通过自动注入定义的Feign客户端接口,调用其中的方法,Feign会自动将请求转发到对于的服务地址
@RestController public class OrderController { @Autowired private OrderApiClient orderApiClient; @GetMapping("/orders/{id}") public Order getOrderById(@PathVariable Long id) { return orderApiClient.getOrderById(id); } }