Spring Cloud Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。其英文表意为“假装,伪装,变形”,是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。
属于接口编程调用。可以对比Rest方式来实现负载均衡=>这里!!!
修改普通的消费者,变成使用feign的消费者客户端
<dependencies>
<dependency>
<groupId>com.jylgroupId>
<artifactId>springcloud-apiartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-ribbonartifactId>
<version>1.4.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-eurekaartifactId>
<version>1.4.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-feignartifactId>
<version>1.4.6.RELEASEversion>
dependency>
dependencies>
在服务层接口上添加
@FeignClient
注解name
= “对应eureka服务界面Application的值”
注意:
这里的映射路径要对应提供者控制层提供的访问路径
@FeignClient(name = "SPRINGCLOUD-PROVIDER-DEPT")
public interface DeptClientService {
@GetMapping("/dept/get/{id}")
public Dept get(@PathVariable("id") Long id);
@GetMapping("/dept/list")
public List<Dept> getAll();
@PostMapping("/dept/add")
public boolean add(Dept dept);
}
返回的是负载均衡规则,此规则也可以自定义,自定义类需要实现IRule接口
@Configuration
public class ConfigBean{
@Bean
public IRule randomRule() {
return return new RandomRule(); // 随机
}
}
直接自动注入服务层接口,就可以访问到提供者。
@RestController
public class DeptConsumerController {
@Autowired
private DeptClientService clientService;
@GetMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id){
return clientService.get(id);
}
@GetMapping("/consumer/dept/list")
public List<Dept> getAll(){
return clientService.getAll();
}
@PostMapping("/consumer/dept/add")
public boolean add(Dept dept){
return clientService.add(dept);
}
}
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.jyl.springcloud"}) // 扫描到springcloud-api中的sercie包下的DeptClientService接口
public class DeptConsumer_Feign_80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer_Feign_80.class,args);
}
}
启动3个eureka服务、3个提供者和一个feign消费者
访问 http://localhost/consumer/dept/list
,测试负载均衡,默认是轮询方式。