spring cloud
This commit is contained in:
@ -1,6 +1,28 @@
|
||||
# Spring-Cloud-Feign
|
||||
|
||||
|
||||
<nav>
|
||||
<a href="#一Feign-简介">一、Feign 简介</a><br/>
|
||||
<a href="#二项目结构">二、项目结构</a><br/>
|
||||
<a href="#三服务提供者的实现">三、服务提供者的实现</a><br/>
|
||||
<a href="#31-定义服务">3.1 定义服务</a><br/>
|
||||
<a href="#32-服务注册">3.2 服务注册</a><br/>
|
||||
<a href="#四服务消费者的实现">四、服务消费者的实现</a><br/>
|
||||
<a href="#41-基本依赖">4.1 基本依赖</a><br/>
|
||||
<a href="#42-EnableFeignClients">4.2 @EnableFeignClients </a><br/>
|
||||
<a href="#43-创建服务调用接口">4.3 创建服务调用接口</a><br/>
|
||||
<a href="#44--Feign-客户端">4.4 Feign 客户端</a><br/>
|
||||
<a href="#45--调用远程服务">4.5 调用远程服务</a><br/>
|
||||
<a href="#五启动测试">五、启动测试</a><br/>
|
||||
<a href="#51-启动服务">5.1 启动服务</a><br/>
|
||||
<a href="#52--验证负载均衡">5.2 验证负载均衡</a><br/>
|
||||
<a href="#六Feign-的服务容错">六、Feign 的服务容错</a><br/>
|
||||
<a href="#61-开启容错配置">6.1 开启容错配置</a><br/>
|
||||
<a href="#62-定义降级处理">6.2 定义降级处理</a><br/>
|
||||
<a href="#63-配置降级处理">6.3 配置降级处理</a><br/>
|
||||
<a href="#64-测试熔断">6.4 测试熔断</a><br/>
|
||||
</nav>
|
||||
|
||||
## 一、Feign 简介
|
||||
|
||||
在上一个用例中,我们使用 Ribbon + RestTemplate 实现服务之间的远程调用,实际上每一个调用都是模板化的内容,所以 Spring Cloud Feign 在此基础上进行了进一步的封装。我们只需要定义一个接口并使用 Feign 注解的方式来进行配置,同时采用 springMvc 注解进行参数绑定就可以完成服务的调用。Feign 同时还内置实现了负载均衡、服务容错等功能。
|
||||
@ -19,9 +41,13 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 三、服务提供者的实现
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/feign-producer.png"/> </div>
|
||||
|
||||
|
||||
### 3.1 定义服务
|
||||
|
||||
产品服务由 `ProductService` 提供,并通过 `ProducerController` 将服务暴露给外部调用:
|
||||
@ -124,6 +150,8 @@ public class ProducerApplication {
|
||||
## 四、服务消费者的实现
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/feign-consumer.png"/> </div>
|
||||
|
||||
|
||||
### 4.1 基本依赖
|
||||
|
||||
```xml
|
||||
@ -195,6 +223,8 @@ public interface ProductFeign {
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/common-feign.png"/> </div>
|
||||
|
||||
|
||||
|
||||
### 4.4 Feign 客户端
|
||||
|
||||
继承公共接口,创建 CProductFeign, 用 @FeignClient 声明为 Feign 客户端:
|
||||
@ -256,20 +286,30 @@ public class SellController {
|
||||
启动一个Eureka服务、三个生产者服务(注意区分端口)、和一个消费者服务。Feign 的依赖中导入了 spring-cloud-starter-netflix-ribbon 依赖,并且在内部实现了基于 Ribbon 的客户端负载均衡,所以我们这里启动三个生产者服务来观察负载均衡的情况:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-cloud-ribbon-app.png"/> </div>
|
||||
|
||||
|
||||
**服务注册中心:**
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-cloud-ribbon-eureka.png"/> </div>
|
||||
|
||||
|
||||
### 5.2 验证负载均衡
|
||||
|
||||
访问 http://localhost:8080/sell/products 查看负载均衡的调用结果:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-cloud-ribbon-products-8020.png"/> </div>
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-cloud-ribbon-products-8030.png"/> </div>
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/feign-8040.png"/> </div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 六、Feign 的服务容错
|
||||
|
||||
### 6.1 开启容错配置
|
||||
@ -278,6 +318,8 @@ Feign 的依赖中默认导入了 Hystrix (熔断器)的相关依赖,我
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/feign-hystrix-maven.png"/> </div>
|
||||
|
||||
|
||||
|
||||
在 application.yml 中开启 Hystrix :
|
||||
|
||||
```yml
|
||||
@ -381,3 +423,5 @@ public List<Product> queryAllProducts() {
|
||||
测试结果:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/feign-hystrix.png"/> </div>
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user