Feign定义【可跳过】
Spring Cloud Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。其英文表意为“假装,伪装,变形”,是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。
Feign
属于接口编程调用。可以对比Rest方式来实现负载均衡=>这里!!!
修改普通的消费者,变成使用feign的消费者客户端
1、导入依赖
<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的值”
注意:
这里的映射路径要对应提供者控制层提供的访问路径
@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接口
@Configuration
public class ConfigBean{ @Bean public IRule randomRule() { return return new RandomRule(); // 随机}
}
4、feign实现客户端的控制层
直接自动注入服务层接口,就可以访问到提供者。
@RestController
public class DeptConsumerController {@Autowiredprivate 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客户端启动类
@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
,测试负载均衡,默认是轮询方式。