Spring Cloud Feign
Spring Cloud Feign 是一套基于 Netflix Feign 实现的声明式服务调用客户端它使得编写 web 服务客户端变得更加简单我们只需要通过创建接口并用注解来配置它既可完成对 Web 服务接口的绑定它具备可插拔的注解支持, 包括 Feign 注解 JAX-RS 注解它也支持可插拔的编码器和解码器 Spring Cloud Feign 还扩展了对 Spring MVC 注解的支持, 同时还整合了 Ribbon 和 Eureka 来提供均衡负载的 HTTP 客户端实现
下面, 我们通过一个例子来展现 Feign 如何方便的声明对 eureka-client 服务的定义和调用
动手试一试
下面的例子, 我们将利用之前构建的 eureka-server 作为服务注册中心 eureka-client 作为服务提供者作为基础而基于 Spring Cloud Ribbon 实现的消费者, 我们可以根据 eureka-consumer 实现的内容进行简单改在就能完成, 具体步骤如下:
根据 eureka-consumer 复制一个服务消费者工程, 命名为: eureka-consumer-feign 在 pom.xml 中增加下面的依赖:
- <dependencies>
- ...
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-feign</artifactId>
- </dependency>
- </dependencies>
修改应用主类通过 @EnableFeignClients 注解开启扫描 Spring Cloud Feign 客户端的功能:
- @EnableFeignClients
- @EnableDiscoveryClient
- @SpringBootApplication
- public class Application {
- public static void main(String[] args) {
- new SpringApplicationBuilder(Application.class).web(true).run(args);
- }
- }
创建一个 Feign 的客户端接口定义使用 @FeignClient 注解来指定这个接口所要调用的服务名称, 接口中定义的各个函数使用 Spring MVC 的注解就可以来绑定服务提供方的 REST 接口, 比如下面就是绑定 eureka-client 服务的 / dc 接口的例子:
- @FeignClient("eureka-client")
- public interface DcClient {
- @GetMapping("/dc")
- String consumer();
- }
修改 Controller 通过定义的 feign 客户端来调用服务提供方的接口:
- @RestController
- public class DcController {
- @Autowired
- DcClient dcClient;
- @GetMapping("/consumer")
- public String dc() {
- return dcClient.consumer();
- }
- }
通过 Spring Cloud Feign 来实现服务调用的方式更加简单了, 通过 @FeignClient 定义的接口来统一的生命我们需要依赖的微服务接口而在具体使用的时候就跟调用本地方法一点的进行调用即可由于 Feign 是基于 Ribbon 实现的, 所以它自带了客户端负载均衡功能, 也可以通过 Ribbon 的 IRule 进行策略扩展另外, Feign 还整合的 Hystrix 来实现服务的容错保护, 在 Dalston 版本中, Feign 的 Hystrix 默认是关闭的待后文介绍 Hystrix 带领大家入门之后, 我们再结合介绍 Feign 中的 Hystrix 以及配置方式
在完成了上面你的代码编写之后, 读者可以将 eureka-servereureka-clienteureka-consumer-feign 都启动起来, 然后访问 http://localhost:2101/consumer , 来跟踪观察 eureka-consumer-feign 服务是如何消费 eureka-client 服务的 / dc 接口的, 并且也可以通过启动多个 eureka-client 服务来观察其负载均衡的效果
构建微服务架构 Spring Cloud: 服务消费 (Feign)
来源: http://www.bubuko.com/infodetail-2490494.html