版权声明:(谢厂节的博客)博主文章绝大部分非原创,转载望留链接。 https://blog.csdn.net/xundh/article/details/82530245
Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。
Feign整合了Ribbon和Hystrix(关于Hystrix我们后面再讲),可以让我们不再需要显式地使用这两个组件。此外,Spring Cloud还对Feign提供了Spring MVC注解的支持,也使得我们在Web中可以使用同一个HttpMessageConverter。
Feign特征
- 可插拔的注解支持,包括Feign注解和JAX-RS注解;
- 支持可插拔的HTTP编码器和解码器;
- 支持Hystrix和它的Fallback;
- 支持Ribbon的负载均衡;
- 支持HTTP请求和响应的压缩。
demo
添加依赖:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>twostepsfromjava.cloud</groupId>
<artifactId>twostepsfromjava-cloud-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../parent</relativePath>
</parent>
<artifactId>mall-web</artifactId>
<name>Spring Cloud Sample Projects: Mall</name>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
</dependencies>
</project>
启动类
/**
* TwoStepsFromJava Cloud -- Mall Web Project
*
* @author CD826([email protected])
* @since 1.0.0
*/
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
接口调用类
/**
* Product Service
*
* @author CD826([email protected])
* @since 1.0.0
*/
@FeignClient("PRODUCT-SERVICE")
public interface ProductService {
@RequestMapping(value = "/products", method = RequestMethod.GET)
List<Product> findAll();
@RequestMapping(value = "/products/{itemCode}", method = RequestMethod.GET)
Product loadByItemCode(@PathVariable("itemCode") String itemCode);
}
说明: 假如你的Service是单独编译一个jar包,那么在使用@EnableFeignClients注解时需要指定basePackages的值,如:
@EnableFeignClients(basePackages = "io.twostepsfromjava.cloud.**")
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
controller
/**
* Product Controller
*
* @author CD826([email protected])
* @since 1.0.0
*/
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductService productService;
@RequestMapping(method = RequestMethod.GET)
public List<Product> list() {
return this.productService.findAll();
}
@RequestMapping(value = "/{itemCode}", method = RequestMethod.GET)
public Product detail(@PathVariable String itemCode) {
return this.productService.loadByItemCode(itemCode);
}
}
配置文件
server.port=8080
spring.application.name=MALL-WEB
eureka.client.service-url.defaultZone=http://localhost:8260/eureka
本文摘自:
https://www.jianshu.com/p/a0d50385e598
本文代码未测试。