一 Feign 简介
Feign 是一个声明式的伪 Http 客户端, 它使得写 Http 客户端变得更简单使用 Feign, 只需要创建一个接口并注解它具有可插拔的注解特性, 可使用 Feign 注解和 JAX-RS 注解 Feign 支持可插拔的编码器和解码器 Feign 默认集成了 Ribbon, 并和 Eureka 结合, 默认实现了负载均衡的效果
简而言之:
Feign 采用的是基于接口的注解
Feign 整合了 ribbon
启动以前课程中的工程, server: 端口 7080,client,client2: 端口 8082,8083
1: 新建 Feign 工程, idea 自身支持创建
新建完后, 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>
- <groupId>com.springcloud</groupId>
- <artifactId>service-feign</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>service-feign</name>
- <description>Demo project for Spring Boot</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.8.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-eureka</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-feign</artifactId>
- <version>1.3.5.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-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>Dalston.RC1</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- <repositories>
- <repository>
- <id>spring-milestones</id>
- <name>Spring Milestones</name>
- <url>https://repo.spring.io/milestone</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
- </project>
修改配置和文件如下:
- eureka.client.service-url.defaultZone= http://localhost:7080/eureka/
- server.port= 8085
- spring.application.name=service-feign
程序启动类如下:
- @SpringBootApplication
- @EnableDiscoveryClient
- @EnableFeignClients
- public class ServiceFeignApplication {
- public static void main(String[] args) {
- SpringApplication.run(ServiceFeignApplication.class, args);
- }
- }
定义一个 feign 接口, 通过 @ FeignClient(服务名), 来指定调用哪个服务比如在代码中调用了 service-hi 服务的 / hi 接口, 代码如下
- @FeignClient(value = "service-hi",fallback = SchedualServiceHiHystric.class)
- public interface SchedualServiceHi {
- @RequestMapping(value = "/hi",method = RequestMethod.GET)
- String sayHiFromClientOne(@RequestParam(value = "name") String name);
- }
在 Web 层的 controller 层, 对外暴露一个 / hi 的 API 接口, 通过上面定义的 Feign 客户端 SchedualServiceHi 来消费服务代码如下:
- @RestController
- public class HiController {
- @Autowired
- SchedualServiceHi schedualServiceHi;
- @RequestMapping(value = "/hi",method = RequestMethod.GET)
- public String sayHi(@RequestParam String name){
- return schedualServiceHi.sayHiFromClientOne(name);
- }
- }
启动程序, 多次访问 http://localhost:8085/hi?name=wang
返回结果为
- hi wang,i am from port:8082
- hi wang,i am from port:8083
说明 Feign 已经自动实现了负载均衡
来源: http://blog.csdn.net/wang_shuyu/article/details/78688771?from=singlemessage