前言
这可能只有某项技术中的冰山一角,并不是很全面,希望大家谅解,后面我会抽时间去探索、完善更多的功能。尽量简单易懂的表达出来,也希望大家提出我的不足之处。
Feign特性
Spring Cloud Feign是面向接口的Http远程调用工具,提供了接口和注解方式进行调用。同时,Feign整合了Ribbon和Hystrix。
可插拔的注解支持,包括Feign注解和JAX-RS注解;
支持可插拔的HTTP编码器和解码器;
支持Hystrix和它的Fallback;
支持Ribbon的负载均衡;
支持HTTP请求和响应的压缩。
快速入门
创建项目
创建一个Maven项目,命名为spring-cloud-feign
在pom.xml中引入需要的依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<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>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合eureka客户端 -->
<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>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
</dependencies>
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
启动文件
EnableFeignClients代表当前是Feign客服端
EnableDiscoveryClient让注册中心发现
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApp {
public static void main(String[] args) {
SpringApplication.run(FeignApp.class, args);
}
}
配置文件
新建yml文件
#注册中心地址
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:9000/eureka/
server:
port: 9002
#服务名
spring:
application:
name: tinko-feign
feign:
hystrix:
enabled: true
注册中心启动
启动过程后,访问我们的注册中心http://localhost:9000/
可以在下面看到我们有一个服务存在,也有我们刚创建的消费者
服务提供方
我们在服务提供方写我们暴露出去的接口方法
@RestController
public class HelloController {
@Value("${server.port}")
private String port;
@RequestMapping("/user")
public String hello(String name) {
return name + "feign调用成功!";
}
}
Feign调用
FeignClient 表明我们调用相关信息
tinko-1 服务方应用名(不要出现下划线!!!)
fallback 发生错误时调用方法
@FeignClient(value = "tinko-1",fallback = UserFeignImpl.class)
public interface UserFeign {
@RequestMapping("/user")
String user(@RequestParam("name") String name);
}
hystrix断路器
当Feign调用服务方不成功时,返回给用户的友好提示
断路器会在接下来的博客中提到
@Component
public class UserFeignImpl implements UserFeign{
@Override
public String user(String name) {
return "Sorry,Server Error:" + name;
}
}
当调用服务出现问题时,如:服务挂掉等等
此时,就会出现我们断路器返回的消息
消费者接口
@RestController
public class UserController {
@Autowired
private UserFeign userFeign;
@RequestMapping("/user")
public String user(String name) {
return userFeign.user(name);
}
}
效果
可以看到我们已经从服务提供方拿到了消息结果
项目地址
如果各位看官、大佬觉得对你有帮助,请大佬们动动你们的小手,帮我star一下项目!
传送门