阅读完需:约 3 分钟
我们使用Ribbon、RestTemplate、Hystrix组件,这些组件是我们Spring Cloud中非常基础的组件,小伙伴们在使用的过程中可能也发现了这些东西都是同时出现的,而且配置也都非常相似,每次开发都有很多相同的代码,因此,Spring Cloud基于Netflix Feign整合了Ribbon和Hystrix,让我们的开发工作变得更加简单,就像Spring Boot是对Spring+SpringMVC的简化一样。Spring Cloud Feign不仅在配置上大大简化了开发工作,同时还提供了一种声明式的Web服务客户端定义方式。
中文文档:
https://www.springcloud.cc/spring-cloud-dalston.html#spring-cloud-feign
环境搭建
OK,首先我们通过下面六步来创建一个Spring Cloud Feign工程,先来体验下Spring Cloud Feign带给我们的便利。
小插曲: provider -server (生产者) 接口示例
@RestController
public class HelloController implements IUserService {
@Value("${server.port}")
Integer port;
@Override
public String hello() {
String s = "hello javaboy:" + port;
System.out.println(s);
int i = 1 / 0;
return s;
}
@Override
public String hello2(String name) {
System.out.println(new Date() + ">>>" + name);
return "hello " + name;
}
@PostMapping("/user1")
public User addUser1(User user) {
return user;
}
@Override
public User addUser2(@RequestBody User user) {
return user;
}
@PutMapping("/user1")
public void updateUser1(User user) {
System.out.println(user);
}
@PutMapping("/user2")
public void updateUser2(@RequestBody User user) {
System.out.println(user);
}
@DeleteMapping("/user1")
public void deleteUser1(Integer id) {
System.out.println(id);
}
@Override
public void deleteUser2(@PathVariable Integer id) {
System.out.println(id);
}
@Override
public void getUserByName(@RequestHeader String name) throws UnsupportedEncodingException {
System.out.println(URLDecoder.decode(name, "UTF-8"));
}
}
启动Feign的前提是要有 eureka-server (注册中心), provider -server (生产者)Feign 只是整合了 Ribbon和Hystrix ,相当于一个消费者去请求接口
总体:

第一步:创建普通Spring Boot工程
首先我们来创建一个普通的Spring Boot工程,取名为 openfeign 。

第二步:配置 application.properties 配置
spring.application.name=openfeign
server.port=4000
eureka.client.service-url.defaultZone=http://localhost:1111/eureka
第三步:启动类上加注解
@SpringBootApplication
@EnableFeignClients
public class OpenfeignApplication {
public static void main(String[] args) {
SpringApplication.run(OpenfeignApplication.class, args);
}
}
第四步:定义 HelloService 接口,去使用 OpenFeign
@FeignClient("provider")
public interface HelloService {
@GetMapping("/hello")
String hello();//这里的方法名无所谓,随意取
}
第五步: HelloController 中,调用 HelloService 进行测试
@RestControllerpublic
class HelloController {
@Autowired
HelloService helloService;
@GetMapping("/hello")
public String hello() {
return helloService.hello();
}
}
接下来就可以启动服务了!
Ribbon和Hystrix的功能都有,只是我们使用Feign实现起来更简单,Feign使用了一种更加优雅的方式来调用服务提供者的接口,避免了我们写模板式的RestTemplate代码。