(努力到这里啦!加油!)
在之前的笔记中,我们用了eureka+rest+ribbon的方法实现服务注册和服务调用。如果具体的用Ribbon调用服务的话,他还有有点复杂的,所以Spring cloud Feign 就来啦!
Spring Cloud Feign 是一个声明web服务客户端,它使编写web服务客户端更加容易,使Feign创建一个接口并对他注解。它整合了Ribbon和Hystrix,从而不再需要显式地使用这两个组件。Feign还提供了HTTP请求的模板,通过编写简单的接口和注解,就可以定义好HTTP请求的参数、格式、地址等信息。接下来,Feign会完全代理HTTP请求,我们只需要像嗲用 方法一样调用它就可以完成服务请求。Spring Cloud增加了对Spring MVC的注解,Spring Web默认使用了HttpMessageConverters,Spring Cloud集成Ribbon和Eureka提供的负载均衡的HTTP客户端Feign。
Feign的特性如下:
- 它具有可插拔的注解支持包括Feign注解与JAX-RS注解
- Feign还支持可插拔的编码器与解码器
- 支持Ribbon负载均衡
- 支持Hystrix和它的fallback
- 支持HTTP请求和响应的压缩
Feign Consumer:服务消费者
- 添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
- 开启Feign
通过添加@EnableFeignClient注解开启Feign的功能
@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class FeignConsumerApplication { public static void main(String[] args) { SpringApplication.run(FeignConsumerApplication.class, args); } }
- 定义接口
通过@FeignClient("服务名")定义接口,指定调用哪个服务。比如如下定义了调用eureka-provider服务的“/”接口,定义consumer()
@FeignClient("eureka-provider") public interface HomeClient { @GetMapping("/") String consumer(); }
- 消费方法
编写一个Controller,消费提供者的home()方法,与Ribbon不同的是,这里构建并初始化的是接口homeClient,hello()调用homeClient的consumer(),
@RestController public class ConsumerController { @Autowired private HomeClient homeClient; @GetMapping(value = "/hello") public String hello() { return homeClient.consumer(); } }
- 配置
eureka: client: serviceUrl: defaultZone: http://localhost:8080/eureka/ spring: application: name: feign-consumer server: port: 9000
- 测试
依次启动service--provider-1/2/3--consumer
查看服务是否注册成功
负载均衡响应
参考:https://www.w3cschool.cn/spring_cloud/spring_cloud-t2k62ixi.html
附上原作者的源码:https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-feign