- Feign是Netflix开发的声明式,模板化的HTTP客户端;
- Feign不仅支持自身的注解,还支持JAX_RS注解;
- SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka。
Feign和Ribbon的联系
- Ribbon是一个基于HTTP和TCP的客户端负载均衡组件,可以在客户端配置服务端列表,使用HTTPClient或者RestTemplate进行http请求。
- Feign 整合了Ribbon,就是一个使用起来更加方便的HTTP客户端,采用接口的方式进行服务端的调用。
- Feign本身集成了Ribbon的依赖和自动配置,可以直接配置Ribbon来达到负载均衡的配置,例如:可以通过ribbon.xxx来进行全局配置,也可以使用 服务名.ribbon.xxx对指定服务配置。
Feign的简单使用
1、引入依赖(服务消费者)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、启动类添加Feign的支持(消费者)
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
3、配置调用接口(创建一个调用服务提供者的Feign接口)
//1、使用@FeignClient注解和服务提供者name声明服务提供者
@FeignClient(name = "product_service")
public interface ProduceFeignClient {
//2、配置需要调用微服务者接口
@RequestMapping(value = "/buy", method = RequestMethod.GET)
public String getBuy();
}
4、配置消费端的调用接口
注意:Feign识别不了下滑杠_只能识别-
@RestController
public class consumerController {
//1、注入ProduceFeignClient实例
@Autowired
private ProduceFeignClient produceFeignClient;
@GetMapping("/consumer")
public String consumer() {
return produceFeignClient.getBuy(); //2、使用接口方式调用服务提供者
}
}