一、Feign简介
Feign 的英文表意为 “假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以接口注解的方式发起 Http 请求,而不用像 httpclient 通过封装 HTTP 请求报文的方式调用。Feign 通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。Feign被广泛应用在Spring Cloud 的解决方案中,是学习基于Spring Cloud 微服务架构不可或缺的重要组件。
并且 Feign 默认集成了 Ribbon,并和 Eureka 结合,实现了负载均衡的效果。
二、开发步骤
1. pom 配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.bdqn</groupId>
<artifactId>springcloud-feign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud-feign</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. application.yml 配置
#服务地址
server:
port: 8104
#应用名称
spring:
application:
name: springcloud-feign
#注册中心地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8100/eureka
register-with-eureka: true
fetch-registry: true
-
创建接口
@FeignClient(“springcloud-emp”)
public interface EmpServiceApi {@RequestMapping("/empinfo") String getUserInfo();
}
springcloud-emp为要调用的服务名
4. 控制层 controller
@RestController
public class EmpController {
@Autowired
EmpServiceApi service;
@RequestMapping("/test")
public String test(){
String msg = service.getUserInfo();
return msg;
}
}
5. 启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class SpringcloudFeignApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudFeignApplication.class, args);
}
}
6. 测试
启动注册中心,springcloud-emp 服务和 feign 客户端,首先查看注册中心:
springcloud-emp 服务多开,模拟集群,然后我们通过 feign 客户端调用,可以发现内置负载均衡: