diff --git a/note/springCloudNetflix-7-28.md b/note/springCloudNetflix-7-28.md
new file mode 100644
index 0000000000000000000000000000000000000000..e802934a722c3802d619fedacc674cd5bd96d2ba
--- /dev/null
+++ b/note/springCloudNetflix-7-28.md
@@ -0,0 +1,75 @@
+[toc]
+
+# SpringCloudNetflix-day02
+
+## 1.RestTemplate服务通信
+
+- RestTemplate是spring基于restful封装的简单的Http客户端工具,可以通过它来实现服务之间的通信。RestTemplate本身不具备服务发现和负载均衡的功能
+
+## 2.Ribbon客户端负载均衡
+
+- Ribbon是Netflix发布的云中间层服务开源项目,主要提供负载均衡算法的功能。Ribbon客户端组件提供一系列完善的配置项。Ribbon可以按照负载均衡算法向多个服务发起调用
+
+### 1.Ribbon工作机制
+
+- Ribbon会根据指定的服务名,根据服务名在通信地址清单中找到对应服务的通信地址,然后Ribbon按照负载均衡算法选择某一个通信地址,通过RestTemplate发起http请求,实现服务的调用。
+
+### 2.负载均衡算法
+
+- RoundRobinRule(默认)
+ - 简单的轮询列表来选择服务器
+- AvailabilityFilteringRule
+ - 对以下两种服务器进行忽略
+ 1. 默认情况下,如果服务器三次连接失败,这台服务器会设置为“短路”状态。可以通过配置loadbalancer.connectionFilureCountThreshold来指定连接失败多少次之后设置为短路状态
+ 2. 并发数过高的服务器,并发连接数的上限,可有客户端的ActiveConnectionsLimit设置
+- WeightedResponseTimeRule
+ - 为每个服务器赋予一个权重值。服务器响应时间越长,这个服务器权重越小。这个规则随机选择服务器,权重值会影响服务器的选择
+- ZoneAvoidanceRule
+ - 以区域可用的服务器为基础进行服务器的选择,使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。
+- BestAvailableRule
+ - 忽略哪些短路服务器,并选择并发数较低的服务器
+- RandomRule
+ - 随机选择一个可用的服务器
+- Retry
+ - 重试机制选择逻辑
+
+## 3.OpenFeign客户端负载均衡
+
+- 基于Ribbon进行了封装。Feign是一个声明式的http客户端,使用feign可以实现声明式rest调用,它的目的就是让web service调用更加简单。Feign整合了Ribbon和springmvc注解,这让feign的客户端接口看起来像一个controller,feign提供了http请求的模板,通过编写简单的接口和插入注解,就可以定义好http请求的参数、格式、地址等信息。feign会安全代理http请求,可以像调用方法一样调用feign完成服务请求。同时feign整合了hystrix,可以很容易的实现服务熔断和降级
+
+## 4.Hystrix熔断器
+
+- Hystrix是处理依赖隔离的框架,将出现故障的服务通过熔断、降级等手段隔离服务,这样不会影响整个系统的主业务,同时也可以做服务的治理和监控
+
+### 1.hystrix设计原则
+
+1. 防止单个服务异常导致整个微服务故障
+2. 快速失败,如果服务出现故障,服务请求快速失败,线程不会等待
+3. 服务降级,请求故障可以返回设定好的兜底数据
+4. 熔断机制,防止故障的扩散,导致整个服务瘫痪
+5. 服务监控,提供了hystrix bashboard仪表盘,实时监控熔断器状态
+
+### 2.hystrix的功能
+
+#### 1.资源隔离
+
+- 资源隔离包括线程池隔离和信号量隔离,作用是限制分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。资源隔离就是限制请求的数量
+ - 线程池隔离:使用一个线程池来存储当前请求,线程池对请求做处理,设置任务返回处理超时时间,堆积的请求先入线程池队列。这种方式要为每个依赖服务申请线程池,有一定的资源消耗,好处是可以应对突发流量(流量洪峰来临时,处理不完可以将数据存储到线程池队列里慢慢处理)
+ - 信号量隔离:使用一个原子计数器记录当前有多少个线程在运行,请求来先判断计数器的数值,若超过设置的最大线程个数则丢弃该类型的请求,若不超过则会执行请求并计数器+1,如果请求返回计数器-1.这种方式是严格的控制线程且立即返回模式,无法应对突发流量
+
+#### 2.服务熔断
+
+- 熔断机制是对服务链路的保护机制,如果链路上的某个服务不可访问,调用超时,发生异常等,服务会触发降级返回托底数据,然后熔断服务的调用(失败率达到某个阈值服务标记为短路状态),当检查到该节点能正常使用是服务会快速恢复
+
+#### 3.降级机制
+
+- 超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据
+
+#### 4.缓存
+
+- 提供了请求缓存、请求合并实现,在高并发下,hystrix请求缓存可以方便地开启和使用请求缓存来优化系统,达到减轻高并发时请求线程的消耗、降低请求响应时间的效果
+
+### 3.hystrix工作机制
+
+- 正常情况下,熔断器处于关闭状态(closed),如果调用持续出错或者超时到达设定的阈值,电路被打开进入熔断状态(open),这是请求这个服务会触发快速失败(立马返回兜底数据,不让线程死等),后续一段时间内所有的调用都会被拒绝(Fail Fast),一段时间之后(withCircuitBreakerSleepWindowInMilliseconds=5s),保护器会尝试进入半熔断状态(half-open),允许少量请求进行尝试,如果调用依然失败,则回到熔断状态,如果调用成功,则回到电路闭合状态,取消熔断状态。
+
diff --git a/pom.xml b/pom.xml
index 2b32217bba30c99d14f1c59b5d0e8400822fbabd..861af0596d52b72e119544d88875848a6c5b3341 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,6 +12,7 @@
spring-cloud-user-server
spring-cloud-order-server
spring-cloud-common
+ spring-cloud-pay-server
pom
diff --git a/spring-cloud-order-server/pom.xml b/spring-cloud-order-server/pom.xml
index 91e6e41fc84f1a42776c18f7aab1fd2dc435f74f..69b2caf07da5ad20f6746ca33afca70a0e234938 100644
--- a/spring-cloud-order-server/pom.xml
+++ b/spring-cloud-order-server/pom.xml
@@ -34,5 +34,10 @@
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
\ No newline at end of file
diff --git a/spring-cloud-order-server/src/main/java/cn/mobius/OrderServerApplication.java b/spring-cloud-order-server/src/main/java/cn/mobius/OrderServerApplication.java
index 48fffbf99eadb4d39708360bee0569d3fd540c14..bb4ff77d7849810f6b5864cf8644eadf64245edf 100644
--- a/spring-cloud-order-server/src/main/java/cn/mobius/OrderServerApplication.java
+++ b/spring-cloud-order-server/src/main/java/cn/mobius/OrderServerApplication.java
@@ -1,7 +1,9 @@
package cn.mobius;
+import com.netflix.loadbalancer.RandomRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
@@ -9,6 +11,7 @@ import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
+@EnableCircuitBreaker // 开启hystrix
public class OrderServerApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServerApplication.class,args);
@@ -19,4 +22,13 @@ public class OrderServerApplication {
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
+
+ /**
+ * 全局配置:指定ribbon负载均衡分配算法
+ * 随机算法
+ */
+ @Bean
+ public RandomRule randomRule() {
+ return new RandomRule();
+ }
}
diff --git a/spring-cloud-order-server/src/main/java/cn/mobius/controller/OrderCtrl.java b/spring-cloud-order-server/src/main/java/cn/mobius/controller/OrderCtrl.java
index 48ff547789326dc02cf57393065f16f4612f5fdc..7701dc565b9dcd57898acbdac3b576fd726c2bbc 100644
--- a/spring-cloud-order-server/src/main/java/cn/mobius/controller/OrderCtrl.java
+++ b/spring-cloud-order-server/src/main/java/cn/mobius/controller/OrderCtrl.java
@@ -1,5 +1,6 @@
package cn.mobius.controller;
+import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -10,16 +11,30 @@ import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/order")
+//@DefaultProperties(defaultFallback = "getByUserIdFallbackMethod") // 同一降级配置
public class OrderCtrl {
@Autowired(required = false)
private RestTemplate restTemplate;
+
@GetMapping("/getByUserId/{id}")
+ @HystrixCommand(fallbackMethod = "getByUserIdFallbackMethod") // 指定降级方法
public User getByUserId(@PathVariable Long id){
// 直接使用服务名请求
String url = "http://user-server/user/getByUserId/" + id;
return restTemplate.getForObject(url, User.class);
}
+ /**
+ * 降级方法
+ * 1.返回值相同
+ * 2.参数相同
+ * 3.降级方法名相同
+ * @param id
+ * @return
+ */
+ public User getByUserIdFallbackMethod(@PathVariable("id") Long id) {
+ return User.builder().username("-1").info("获取用户信息失败!").age(-1).build();
+ }
}
diff --git a/spring-cloud-order-server/src/main/resources/application.yml b/spring-cloud-order-server/src/main/resources/application.yml
index bbf5601ac7f0a8d2982c13b62232f1222fdd785b..3dbf27cd914b63ed7e3d4640790103788196fa17 100644
--- a/spring-cloud-order-server/src/main/resources/application.yml
+++ b/spring-cloud-order-server/src/main/resources/application.yml
@@ -10,4 +10,15 @@ spring:
application:
name: order-server
server:
- port: 1030
\ No newline at end of file
+ port: 1030
+
+# ribbon调优配置
+#ribbon:
+# ReadTimeout: 3000 #读取超时时间
+# ConnectTimeout: 3000 #链接超时时间
+# MaxAutoRetries: 1 #重试机制:同一台实例最大重试次数
+# MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数
+# OkToRetryOnAllOperations: false #是否所有操作都重试,因为针对post请求如果没做幂等处理可能会造成数据多次添加/修改
+# eager-load:
+# enabled: true #开启饥饿加载
+# clients: user-server #针对于哪些服务需要饥饿加载
\ No newline at end of file
diff --git a/spring-cloud-order-server/target/classes/application.yml b/spring-cloud-order-server/target/classes/application.yml
index bbf5601ac7f0a8d2982c13b62232f1222fdd785b..3dbf27cd914b63ed7e3d4640790103788196fa17 100644
--- a/spring-cloud-order-server/target/classes/application.yml
+++ b/spring-cloud-order-server/target/classes/application.yml
@@ -10,4 +10,15 @@ spring:
application:
name: order-server
server:
- port: 1030
\ No newline at end of file
+ port: 1030
+
+# ribbon调优配置
+#ribbon:
+# ReadTimeout: 3000 #读取超时时间
+# ConnectTimeout: 3000 #链接超时时间
+# MaxAutoRetries: 1 #重试机制:同一台实例最大重试次数
+# MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数
+# OkToRetryOnAllOperations: false #是否所有操作都重试,因为针对post请求如果没做幂等处理可能会造成数据多次添加/修改
+# eager-load:
+# enabled: true #开启饥饿加载
+# clients: user-server #针对于哪些服务需要饥饿加载
\ No newline at end of file
diff --git a/spring-cloud-order-server/target/classes/cn/mobius/OrderServerApplication.class b/spring-cloud-order-server/target/classes/cn/mobius/OrderServerApplication.class
index d24316cf506886d181edbf203c579e0552690c43..c2b72c4c596c6993287c9e8ca318cf83cb62d763 100644
Binary files a/spring-cloud-order-server/target/classes/cn/mobius/OrderServerApplication.class and b/spring-cloud-order-server/target/classes/cn/mobius/OrderServerApplication.class differ
diff --git a/spring-cloud-order-server/target/classes/cn/mobius/controller/OrderCtrl.class b/spring-cloud-order-server/target/classes/cn/mobius/controller/OrderCtrl.class
index 665365e43c128331fea346fb6e3044f941c01e01..6163cbaf0fa88ade826e3a1874bed5b1dae4bdea 100644
Binary files a/spring-cloud-order-server/target/classes/cn/mobius/controller/OrderCtrl.class and b/spring-cloud-order-server/target/classes/cn/mobius/controller/OrderCtrl.class differ
diff --git a/spring-cloud-pay-server/pom.xml b/spring-cloud-pay-server/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eaf7d15be6c18aa221ca5166ba6ab3ff5302fc28
--- /dev/null
+++ b/spring-cloud-pay-server/pom.xml
@@ -0,0 +1,38 @@
+
+
+
+ springcloud-parent
+ cn.mobius
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ spring-cloud-pay-server
+ spring-cloud-pay-server
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ cn.mobius
+ spring-cloud-common
+ 1.0-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-pay-server/src/main/java/cn/mobius/PayServerApplication.java b/spring-cloud-pay-server/src/main/java/cn/mobius/PayServerApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e640ad7d63cf21e710c8d0b5171fa42c525ecd1
--- /dev/null
+++ b/spring-cloud-pay-server/src/main/java/cn/mobius/PayServerApplication.java
@@ -0,0 +1,15 @@
+package cn.mobius;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableEurekaClient
+@EnableFeignClients // 开启feign
+public class PayServerApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(PayServerApplication.class,args);
+ }
+}
diff --git a/spring-cloud-pay-server/src/main/java/cn/mobius/config/FeignConfiguration.java b/spring-cloud-pay-server/src/main/java/cn/mobius/config/FeignConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c023b69c245b86be320fafdec8d4078ba4eb674
--- /dev/null
+++ b/spring-cloud-pay-server/src/main/java/cn/mobius/config/FeignConfiguration.java
@@ -0,0 +1,16 @@
+package cn.mobius.config;
+
+import feign.Logger;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * feign日志配置
+ */
+@Configuration
+public class FeignConfiguration {
+ @Bean
+ Logger.Level feignLoggerLevel() {
+ return Logger.Level.FULL; //打印Feign的所有日志
+ }
+}
diff --git a/spring-cloud-pay-server/src/main/java/cn/mobius/controller/PayController.java b/spring-cloud-pay-server/src/main/java/cn/mobius/controller/PayController.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ead6eb7e836d4d2e9000e63de0816eddd2af784
--- /dev/null
+++ b/spring-cloud-pay-server/src/main/java/cn/mobius/controller/PayController.java
@@ -0,0 +1,21 @@
+package cn.mobius.controller;
+
+import cn.mobius.fegin.UserFeignClient;
+import domain.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/pay")
+public class PayController {
+
+ @Autowired
+ private UserFeignClient userFeignClient;
+
+ @RequestMapping("/getUserById/{id}")
+ public User getUserById(@PathVariable Long id) {
+ return userFeignClient.getByUserId(id);
+ }
+}
diff --git a/spring-cloud-pay-server/src/main/java/cn/mobius/fallback/UserFeignClientFactory.java b/spring-cloud-pay-server/src/main/java/cn/mobius/fallback/UserFeignClientFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9bb4f85894e382e7136c7569eb4c5b696fc9633
--- /dev/null
+++ b/spring-cloud-pay-server/src/main/java/cn/mobius/fallback/UserFeignClientFactory.java
@@ -0,0 +1,21 @@
+package cn.mobius.fallback;
+
+import cn.mobius.fegin.UserFeignClient;
+import domain.User;
+import feign.hystrix.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class UserFeignClientFactory implements FallbackFactory {
+ @Override
+ public UserFeignClient create(Throwable throwable) {
+ return new UserFeignClient() {
+ @Override
+ public User getByUserId(Long id) {
+ // 日志
+ throwable.printStackTrace();
+ return User.builder().age(-1).username("-1").info("未找到用户信息!").build();
+ }
+ };
+ }
+}
diff --git a/spring-cloud-pay-server/src/main/java/cn/mobius/fallback/UserFeignClientFallback.java b/spring-cloud-pay-server/src/main/java/cn/mobius/fallback/UserFeignClientFallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..447eab4218162b6a0fe3b9f3088d2fdf0f269cbf
--- /dev/null
+++ b/spring-cloud-pay-server/src/main/java/cn/mobius/fallback/UserFeignClientFallback.java
@@ -0,0 +1,24 @@
+package cn.mobius.fallback;
+
+import cn.mobius.fegin.UserFeignClient;
+import domain.User;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 处理托底数据
+ */
+@Component // 交给spring管理
+public class UserFeignClientFallback implements UserFeignClient {
+
+ // 日志打印器
+ private Logger logger = LoggerFactory.getLogger(UserFeignClientFallback.class);
+
+ @Override
+ public User getByUserId(Long id) {
+ logger.info("用户服务不可用");
+ return User.builder().age(-1).username("-1").info("未找到用户信息!").build();
+ }
+}
diff --git a/spring-cloud-pay-server/src/main/java/cn/mobius/fegin/UserFeignClient.java b/spring-cloud-pay-server/src/main/java/cn/mobius/fegin/UserFeignClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7a6ea319b2f66c6bdff3af23bb3573ed03e70e0
--- /dev/null
+++ b/spring-cloud-pay-server/src/main/java/cn/mobius/fegin/UserFeignClient.java
@@ -0,0 +1,33 @@
+package cn.mobius.fegin;
+
+import cn.mobius.fallback.UserFeignClientFactory;
+import cn.mobius.fallback.UserFeignClientFallback;
+import domain.User;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+/**
+ * feign的客户端接口
+ * 用来调取微服务
+ */
+@Component
+//@FeignClient(value = "user-server",fallback = UserFeignClientFallback.class) // 调取那个服务
+@FeignClient(value = "user-server",fallbackFactory = UserFeignClientFactory.class)
+public interface UserFeignClient {
+
+ /**
+ * 调取服务中的那个方法/业务
+ * 1.请求相同
+ * 2.请求路径相同
+ * 3.请求参数相同
+ * 4.返回类型相同
+ * 5.服务名相同
+ * @param id
+ * @return
+ */
+ @GetMapping("/user/getByUserId/{id}")
+ User getByUserId(@PathVariable Long id);
+
+}
diff --git a/spring-cloud-pay-server/src/main/resources/application.yml b/spring-cloud-pay-server/src/main/resources/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..21cc9920444163d8a42f9eafea7a6bfdd91e05ec
--- /dev/null
+++ b/spring-cloud-pay-server/src/main/resources/application.yml
@@ -0,0 +1,34 @@
+#注册到EurekaServer
+eureka:
+ client:
+ serviceUrl:
+ defaultZone: http://localhost:1010/eureka/
+ instance:
+ prefer-ip-address: true #使用ip地址进行注册
+ instance-id: pay-server:1040 #实例ID
+spring:
+ application:
+ name: pay-server
+server:
+ port: 1040
+
+# feign的日志
+logging:
+ level:
+ cn.mobius.fegin.UserFeignClient: debug
+
+# 开启hystrix支持
+feign:
+ hystrix:
+ enabled: true #开启熔断支持
+
+# ribbon调优配置
+#ribbon:
+# ReadTimeout: 3000 #读取超时时间
+# ConnectTimeout: 3000 #链接超时时间
+# MaxAutoRetries: 1 #重试机制:同一台实例最大重试次数
+# MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数
+# OkToRetryOnAllOperations: false #是否所有操作都重试,因为针对post请求如果没做幂等处理可能会造成数据多次添加/修改
+# eager-load:
+# enabled: true #开启饥饿加载
+# clients: user-server #针对于哪些服务需要饥饿加载
\ No newline at end of file
diff --git a/spring-cloud-pay-server/target/classes/application.yml b/spring-cloud-pay-server/target/classes/application.yml
new file mode 100644
index 0000000000000000000000000000000000000000..21cc9920444163d8a42f9eafea7a6bfdd91e05ec
--- /dev/null
+++ b/spring-cloud-pay-server/target/classes/application.yml
@@ -0,0 +1,34 @@
+#注册到EurekaServer
+eureka:
+ client:
+ serviceUrl:
+ defaultZone: http://localhost:1010/eureka/
+ instance:
+ prefer-ip-address: true #使用ip地址进行注册
+ instance-id: pay-server:1040 #实例ID
+spring:
+ application:
+ name: pay-server
+server:
+ port: 1040
+
+# feign的日志
+logging:
+ level:
+ cn.mobius.fegin.UserFeignClient: debug
+
+# 开启hystrix支持
+feign:
+ hystrix:
+ enabled: true #开启熔断支持
+
+# ribbon调优配置
+#ribbon:
+# ReadTimeout: 3000 #读取超时时间
+# ConnectTimeout: 3000 #链接超时时间
+# MaxAutoRetries: 1 #重试机制:同一台实例最大重试次数
+# MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数
+# OkToRetryOnAllOperations: false #是否所有操作都重试,因为针对post请求如果没做幂等处理可能会造成数据多次添加/修改
+# eager-load:
+# enabled: true #开启饥饿加载
+# clients: user-server #针对于哪些服务需要饥饿加载
\ No newline at end of file
diff --git a/spring-cloud-pay-server/target/classes/cn/mobius/PayServerApplication.class b/spring-cloud-pay-server/target/classes/cn/mobius/PayServerApplication.class
new file mode 100644
index 0000000000000000000000000000000000000000..cc0465ed335551eba95c783528d669837d58404a
Binary files /dev/null and b/spring-cloud-pay-server/target/classes/cn/mobius/PayServerApplication.class differ
diff --git a/spring-cloud-pay-server/target/classes/cn/mobius/config/FeignConfiguration.class b/spring-cloud-pay-server/target/classes/cn/mobius/config/FeignConfiguration.class
new file mode 100644
index 0000000000000000000000000000000000000000..cf39b6d0b9c79ed304928b8f5450ec0d11db7727
Binary files /dev/null and b/spring-cloud-pay-server/target/classes/cn/mobius/config/FeignConfiguration.class differ
diff --git a/spring-cloud-pay-server/target/classes/cn/mobius/controller/PayController.class b/spring-cloud-pay-server/target/classes/cn/mobius/controller/PayController.class
new file mode 100644
index 0000000000000000000000000000000000000000..11d7b9fec094bde08d67bb12d1d106ece6e7b99f
Binary files /dev/null and b/spring-cloud-pay-server/target/classes/cn/mobius/controller/PayController.class differ
diff --git a/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFactory$1.class b/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFactory$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..e1b18682917150a363d33698bac52af65cdf8d94
Binary files /dev/null and b/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFactory$1.class differ
diff --git a/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFactory.class b/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..950603aa2e473463f14ebecac698a412b9f62e73
Binary files /dev/null and b/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFactory.class differ
diff --git a/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFallback.class b/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFallback.class
new file mode 100644
index 0000000000000000000000000000000000000000..6a79a100f29144a993d407f66371ca391da80d95
Binary files /dev/null and b/spring-cloud-pay-server/target/classes/cn/mobius/fallback/UserFeignClientFallback.class differ
diff --git a/spring-cloud-pay-server/target/classes/cn/mobius/fegin/UserFeignClient.class b/spring-cloud-pay-server/target/classes/cn/mobius/fegin/UserFeignClient.class
new file mode 100644
index 0000000000000000000000000000000000000000..eac01ae129761932e50941d7eb5ea08938d74b7f
Binary files /dev/null and b/spring-cloud-pay-server/target/classes/cn/mobius/fegin/UserFeignClient.class differ