之前的文章有介绍过客户端负载均衡Ribbon和熔断器Hystrix 这两个组件,使用起来比较麻烦,Spring cloud Feign 这个组件对Ribbon、Hystrix进行了封装,不仅又这两个组件的功能,还可以采用注解的方式进行使用,降低了我们的学习成本,和使用难度。Feign自身的一些组件,比如编码器和解码器等也是可插拔的。本章只简单介绍对于Ribbon和Hystrix的封装使用。
配置Feign
1、添加依赖pom.xml
<!--声明式调用-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
2、添加注解-开启Feign功能
启动类上添加
@EnableFeignClients
3、定义服务调用接口
该接口类似于平常的service接口,只需要添加**@FeignClient(name="服务名“)**
其中name值对应配置文件中 spring.application.name 值 也是在Euraka 中注册的服务名该值不区分大小写。
@FeignClient(name = "clientdemo")
public interface TestFeign {
@RequestMapping(value = "/clientdemo/ribbon/testRibbonProducer",method = RequestMethod.GET)
String testClientDemo();
}
4、参数的使用
@RequestParam(value = "type")String type,@RequestHeader
,其中value不然会报错:IllegalStateException 异常,value属性不可为空;@RequestBody
,当参数为实体类时,需要有默认构造参数,否则会抛异常。
5、使用接口
通过注解进行注入
@Autowired
private TestFeign testFeign;
//调用方法
testFeign.testClientDemo();
6、开启熔断器功能
- 在配置文件中添加配置
#开启feign断路器功能
feign.hystrix.enabled=true
- 开启服务降级
服务接口添加实现类
用注解 @Compoment ,
@Component
public class TestFeignImpl implements TestFeign {
@Override
public String testClientDemo() {
return "执行回调";
}
}
然后在@FeignClient(name = "clientdemo")添加属性 fallback = TestFeignImpl.class;
@FeignClient(name = "clientdemo",fallback = TestFeignImpl.class)