上一篇我使用了RestTemplate+Eureka进行负载均衡的服务消费,现在讲述如何使用feign来实现Rest风格的负载均衡服务消费
一、概述
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
特性:
- 可插拔的注解支持,包括Feign注解和JAX-RS注解;
- 支持可插拔的HTTP编码器和解码器;
- 支持Hystrix和它的Fallback;
- 支持Ribbon的负载均衡;
- 支持HTTP请求和响应的压缩。
二、服务消费者整合Feign
添加feign依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
Feign客户端feignclient:
@FeignClient(value = "MICROSERVICECLOUD-DEPT")
public interface DeptClientService{
@RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)
public Dept get(@PathVariable("id") long id);
@RequestMapping(value = "/dept/list",method = RequestMethod.GET)
public List<Dept> list();
@RequestMapping(value = "/dept/add",method = RequestMethod.POST)
public boolean add(Dept dept);
}
@FeignClient注解中的MICROSERVICECLOUD-DEPT是服务提供者的名称,用户创建Ribbon的负载均衡;当然也可以使用@FeignClient注解的url属性进行指定请求的url,例:@FeignClient(value = "MICROSERVICECLOUD-DEPT", url="http://localhost:8001")
消费者接口:
@RestController
public class DeptController_Consumer{
@Autowired
private DeptClientService deptClientService;
@RequestMapping(value="/consumer/dept/add")
public boolean add(Dept dept){
return deptClientService.add(dept);
}
@RequestMapping(value="/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id){
return deptClientService.get(id);
}
@SuppressWarnings("unchecked")
@RequestMapping(value="/consumer/dept/list")
public List<Dept> list(){
return deptClientService.list();
}
}
消费者启动类:
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class DeptConsumer80_feign_App {
public static void main(String[] args){
SpringApplication.run(DeptConsumer80_feign_App.class, args);
}
}
这样就可以使用feign负载均衡的去调用服务提供者的API了。