Feign是一个声明式的服务Web服务客户端,使得编写Web服务客户端更加容易。SpringCloud使用Feign,Ribbon和Eureka可实现负载均衡。
声明式Web服务客户端Feign
一、启用Feign
在调用方服务的 pom 文件中增加 spring-cloud-starter-feign 依赖并声明启用 Feign 客户端。比如我们是 web-app-service 调用 sms-service 的接口,我们需要在 web-app-service 服务中增加依赖并声明启用Feign。
Feign具有如下特性:
- 可插拔的注解支持,包括Feign注解和JAX-RS注解;
- 支持可插拔的HTTP编码器和解码器;
- 支持Hystrix和它的Fallback;
- 支持Ribbon的负载均衡;
- 支持HTTP请求和响应的压缩。
基本流程:
1 搭建Eureka Server
2 创建服务提供者
3 创建Feign客户端
4 测试运行
pom.xml文件
使用Spring Initializr方式创建一个名称为eureka-feign-client的Spring Boot项目,这里将Group命名为com.itheima,将Artifact命名为eureka-feign-client,添加Eureka Client、Feign.Web、Test依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
EurekaFeignClientApplication.java文件
在启动类EurekaFeignClientApplication中添加EnableEurekaClient注解开启Eureka Client功能,再添加@EnableFeignClients注解开启Feign Client功能。
package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class EurekaFeignClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaFeignClientApplication.class, args);
}
}
application.yml文件
引入依赖后,在全局配置文件application.yml进行相关配置,包括配置程序名称、端口号,服务注册地址等。
spring:
application:
name: eureka-feign-client
server:
port: 8764
eureka:
client:
serviceUrl:
defaultZone: http://localhost:7000/eureka/
总结
Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。
Feign和Ribbon是SpringCloud的Netflix中提供的两个实现软负载均衡的组件,Ribbon和Feign都是用于调用其他服务的,方式不同。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式。