【Spring Cloud】Feign详细介绍及底层原理解析
Feign是一个声明式的Web服务客户端,它的目的就是让远程调用变得更简单。Feign提供了一种简单的接口注解,如@FeignClient,可以用来声明需要调用的服务。Feign可以使用Feign注解或者JAX-RS注解。Feign还支持可插拔的编码器和解码器,可以使用Spring Cloud为Feign提供的Spring Cloud OpenFeign支持。
Feign的底层使用了动态代理,当我们调用Feign客户端的方法时,Feign会生成一个Request,然后将这个Request交给下游的客户端,如OkHttpClient或者HttpURLConnection来完成最终的网络请求。
解决方案:
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 开启Feign客户端功能
@EnableFeignClients
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 创建Feign客户端
@FeignClient(name = "service-provider")
public interface ProviderFeignClient {
@GetMapping("/api/resource/{id}")
String getResourceById(@PathVariable("id") Long id);
}
- 使用Feign客户端
@RestController
public class ConsumerController {
@Autowired
private ProviderFeignClient providerFeignClient;
@GetMapping("/consumer/{id}")
public String getResourceById(@PathVariable("id") Long id) {
return providerFeignClient.getResourceById(id);
}
}
以上就是使用Spring Cloud Feign的基本步骤。
注意:Feign默认使用的是Ribbon作为客户端负载均衡器,如果你想使用其他的负载均衡器,如Spring Cloud LoadBalancer,你需要在配置文件中进行相应的配置。
评论已关闭