Feign定义【可跳过】
Spring Cloud Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。其英文表意为"假装,伪装,变形",是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。
Feign
属于接口编程调用。可以对比Rest方式来实现负载均衡=>这里!!!
修改普通的消费者,变成使用feign的消费者客户端
1、导入依赖
xml
<dependencies>
<!-- 实体类 + Web-->
<dependency>
<groupId>com.jyl</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- ribbon & eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!-- feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
2、创建服务层接口
在服务层接口上添加
@FeignClient
注解name
= "对应eureka服务界面Application的值"
注意:
这里的映射路径要对应提供者控制层提供的访问路径
java
@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);
}
3、客户端配置文件类
返回的是负载均衡规则,此规则也可以自定义,自定义类需要实现IRule接口
java
@Configuration
public class ConfigBean{
@Bean
public IRule randomRule() {
return return new RandomRule(); // 随机
}
}
4、feign实现客户端的控制层
直接自动注入服务层接口,就可以访问到提供者。
java
@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);
}
}
5、feign客户端启动类
java
@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);
}
}
6、测试结果
启动3个eureka服务、3个提供者和一个feign消费者
启动类
访问 http://localhost/consumer/dept/list
,测试负载均衡,默认是轮询方式。
获取dept的所有消息