下载源码:https://gitee.com/ctocloud/spring-cloud-poetry.git
1、Feign定义
Feign 是服务客户端的声明,使用Feign创建一个接口并注解就能很简单的实现服务调用。
这样的设计使得调用更加简单优雅。Feign支持可拔插的编码解码器。
Feign默认集成了Ribbon,自带负载均衡的功能。
Feign整合了Hystrix,可以很方便的实现熔断功能。
2、Feign例子
例子源码请参见:
首先pom文件需要增加依赖 spring-cloud-starter-openfeign,其配置文件 application.yml 不需要改动。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
一、启动程序 加入注解:@EnableFeignClients
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
二、注入service,传入调用参数
@RestController
public class HelloController {
@Autowired
IHelloService helloService;
@GetMapping(value = "hello")
public String hello(@RequestParam String name){
return helloService.hello(name);
}
}
三、FeignClient服务端调用。(包含了Hystric熔断和RestTemplate的Ribbon算法等)
代码IHelloService.java,注解 @FeignClient value 值填写客户端名称,
作用是去注册中心查找服务然后负载均衡。
这里可以填写服务提供者cloud-service。也可以通过URL属性来指定URL。
然后定义接口hello,在@RequestMapping 的value填写的是需要远程调用REST接口的路径。
自定义配置,注解可以通过 @FeignClient(configuration = FooConfiguration.class)
来配置自定义的配置,这样会覆盖默认的配置值。
FooConfiguration 可以配置 feign.Decoder,feign.Encoder和feign.Contract,
注意不需要 @Configuration注解。
@FeignClient(value = "cloud-service", fallback = HelloServiceHystric.class)
public interface IHelloService {
@RequestMapping(value = "api-a/hello", method = RequestMethod.GET)
String hello(@RequestParam(value = "name") String name);
}
3、Feign 对 Hystrix 的支持
首先在 application.yml 中开启 hysteria 的功能;
然后在@FeignClient(fallback = HelloServiceHystric.class) 中配置。
然后HelloServiceHystric 实现 IHelloService 接口,
接口中实现的 hello 方法就是异常情况下断路器的返回。
这时候启动 cloud-consumer-feign项目,down掉服务提供者 cloud-service,
用浏览器访问hello接口会看到效果 “feign, error”。
配置文件中增加:
feign:
hystrix:
enabled: true
@Component
public class HelloServiceHystric implements IHelloService {
@Override
public String hello(@RequestParam(value = "name") String name) {
return "feign, error";
}
}
4、启动测试:
这时候启动 cloud-consumer-feign项目,down掉服务提供者 cloud-service,
用浏览器访问hello接口会看到效果 “feign, error”。