From b7743fcf88b665968d7636785944fa42d1769ea0 Mon Sep 17 00:00:00 2001 From: DesNoix Date: Tue, 13 Apr 2021 00:28:56 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feature:=20Hystrix=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E6=90=AD=E5=BB=BA=20=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- cloud-consumer-feign-hystrix-order80/pom.xml | 67 +++++++++++++++++++ .../bdc/springcloud/OrderHystrixMain80.java | 25 +++++++ .../controller/OrderHystrixController.java | 58 ++++++++++++++++ .../service/OrderFallbackService.java | 24 +++++++ .../service/OrderHystrixService.java | 24 +++++++ .../src/main/resources/application.yml | 17 +++++ .../src/main/resources/application.yml | 2 +- .../java/com/bdc/springcloud/OrderMain80.java | 5 +- .../src/main/resources/application.yml | 9 ++- .../src/main/resources/application.yml | 4 +- .../src/main/resources/application.yml | 2 +- .../springcloud/PaymentHystrixMain8001.java | 2 + .../springcloud/service/PaymentService.java | 11 ++- .../src/main/resources/application.yml | 7 +- .../src/main/resources/application.yml | 6 +- .../src/main/resources/application.yml | 4 +- pom.xml | 2 + 18 files changed, 253 insertions(+), 18 deletions(-) create mode 100644 cloud-consumer-feign-hystrix-order80/pom.xml create mode 100644 cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/OrderHystrixMain80.java create mode 100644 cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/controller/OrderHystrixController.java create mode 100644 cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderFallbackService.java create mode 100644 cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderHystrixService.java create mode 100644 cloud-consumer-feign-hystrix-order80/src/main/resources/application.yml diff --git a/LICENSE b/LICENSE index 9e32cde..528e80a 100644 --- a/LICENSE +++ b/LICENSE @@ -91,7 +91,7 @@ 3. No Trademark License - No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. + No trademark license is granted to use the trade names, trademarks, com.bdc.springcloud.service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction diff --git a/cloud-consumer-feign-hystrix-order80/pom.xml b/cloud-consumer-feign-hystrix-order80/pom.xml new file mode 100644 index 0000000..ac0caef --- /dev/null +++ b/cloud-consumer-feign-hystrix-order80/pom.xml @@ -0,0 +1,67 @@ + + + + cloud20220 + com.bdc.springcloud + 1.0-SNAPSHOT + + 4.0.0 + + cloud-consumer-feign-hystrix-order80 + + + + + org.springframework.cloud + spring-cloud-starter-netflix-hystrix + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + com.bdc.springcloud + cloud-api-commons + ${project.version} + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + 8 + 8 + + + \ No newline at end of file diff --git a/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/OrderHystrixMain80.java b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/OrderHystrixMain80.java new file mode 100644 index 0000000..c79e7c4 --- /dev/null +++ b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/OrderHystrixMain80.java @@ -0,0 +1,25 @@ +package com.bdc.springcloud; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.hystrix.EnableHystrix; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
+ * + * @Description: 主启动类 + * @Project: cloud20220 + * @CreateDate: Created in 2021/4/12 23:12
+ * @Author: gdmz_jqyang@outlook.com + */ +@EnableFeignClients +@SpringBootApplication +@EnableHystrix +public class OrderHystrixMain80 { + public static void main(String[] args) { + SpringApplication.run(OrderHystrixMain80.class,args); + } +} + + diff --git a/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/controller/OrderHystrixController.java b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/controller/OrderHystrixController.java new file mode 100644 index 0000000..b604708 --- /dev/null +++ b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/controller/OrderHystrixController.java @@ -0,0 +1,58 @@ +package com.bdc.springcloud.controller; + +import com.bdc.springcloud.service.OrderHystrixService; +import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
+ * + * @Description: OrderHystrixController + * @Project: cloud20220 + * @CreateDate: Created in 2021/4/12 23:15
+ * @Author: gdmz_jqyang@outlook.com + */ +@RestController +@Slf4j +@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod") //全局的 +public class OrderHystrixController { + @Resource + private OrderHystrixService orderHystrixService; + + @Value("${server.port}") + private String serverPort; + + @GetMapping("/consumer/payment/hystrix/ok/{id}") + public String paymentInfo_OK(@PathVariable("id") Integer id){ + String result = orderHystrixService.paymentInfo_OK(id); + log.info("*******result:"+result); + return result; + } + @GetMapping("/consumer/payment/hystrix/timeout/{id}") +/* @HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",commandProperties = { + @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500") //3秒钟以内就是正常的业务逻辑 + })*/ + @HystrixCommand + public String paymentInfo_TimeOut(@PathVariable("id") Integer id){ + String result = orderHystrixService.paymentInfo_TimeOut(id); + return result; + } + + //兜底方法 + public String paymentTimeOutFallbackMethod(@PathVariable("id") Integer id){ + return "我是消费者80,对付支付系统繁忙请10秒钟后再试或者自己运行出错请检查自己,(┬_┬)"; + } + + //下面是全局fallback方法 + public String payment_Global_FallbackMethod(){ + return "Global异常处理信息,请稍后再试,(┬_┬)"; + } + +} diff --git a/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderFallbackService.java b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderFallbackService.java new file mode 100644 index 0000000..44be4e9 --- /dev/null +++ b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderFallbackService.java @@ -0,0 +1,24 @@ +package com.bdc.springcloud.service; + +import org.springframework.stereotype.Component; + +/** + * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
+ * + * @Description: OrderHystrixService + * @Project: cloud20220 + * @CreateDate: Created in 2021/4/13 00:24
+ * @Author: gdmz_jqyang@outlook.com + */ +@Component +public class OrderFallbackService implements OrderHystrixService{ + @Override + public String paymentInfo_OK(Integer id) { + return "-----PaymentFallbackService fall back-paymentInfo_OK , (┬_┬)"; + } + + @Override + public String paymentInfo_TimeOut(Integer id) { + return "-----PaymentFallbackService fall back-paymentInfo_TimeOut , (┬_┬)"; + } +} diff --git a/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderHystrixService.java b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderHystrixService.java new file mode 100644 index 0000000..23b573e --- /dev/null +++ b/cloud-consumer-feign-hystrix-order80/src/main/java/com/bdc/springcloud/service/OrderHystrixService.java @@ -0,0 +1,24 @@ +package com.bdc.springcloud.service; + +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; + +/** + * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
+ * + * @Description: OrderHystrixService + * @Project: cloud20220 + * @CreateDate: Created in 2021/4/12 23:14
+ * @Author: gdmz_jqyang@outlook.com + */ +@Component +@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT",fallback = OrderFallbackService.class) +public interface OrderHystrixService { + @GetMapping("/payment/hystrix/ok/{id}") + public String paymentInfo_OK(@PathVariable("id") Integer id); + + @GetMapping("/payment/hystrix/timeout/{id}") + public String paymentInfo_TimeOut(@PathVariable("id") Integer id); +} diff --git a/cloud-consumer-feign-hystrix-order80/src/main/resources/application.yml b/cloud-consumer-feign-hystrix-order80/src/main/resources/application.yml new file mode 100644 index 0000000..ff004e2 --- /dev/null +++ b/cloud-consumer-feign-hystrix-order80/src/main/resources/application.yml @@ -0,0 +1,17 @@ +server: + port: 80 + +eureka: + client: + register-with-eureka: true #表识不向注册中心注册自己 + fetch-registry: true #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 + service-url: + defaultZone: http://127.0.0.1:7001/eureka/ + +spring: + application: + name: cloud-provider-hystrix-order + +feign: + hystrix: + enabled: true #如果处理自身的容错就开启。开启方式与生产端不一样。 diff --git a/cloud-consumer-feign-order80/src/main/resources/application.yml b/cloud-consumer-feign-order80/src/main/resources/application.yml index 7655deb..5e8ac78 100644 --- a/cloud-consumer-feign-order80/src/main/resources/application.yml +++ b/cloud-consumer-feign-order80/src/main/resources/application.yml @@ -4,7 +4,7 @@ eureka: client: register-with-eureka: false service-url: - defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka + defaultZone: http://127.0.0.1:7001/eureka, http://eureka7002.com:7002/eureka ribbon: ReadTimeout: 5000 ConnectTimeout: 5000 diff --git a/cloud-consumer-order80/src/main/java/com/bdc/springcloud/OrderMain80.java b/cloud-consumer-order80/src/main/java/com/bdc/springcloud/OrderMain80.java index 2140a8f..2d545c6 100644 --- a/cloud-consumer-order80/src/main/java/com/bdc/springcloud/OrderMain80.java +++ b/cloud-consumer-order80/src/main/java/com/bdc/springcloud/OrderMain80.java @@ -1,14 +1,13 @@ package com.bdc.springcloud; -import com.bdc.myrule.MyselfRule; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; -import org.springframework.cloud.netflix.ribbon.RibbonClient; -import org.springframework.cloud.netflix.ribbon.RibbonClients; +import org.springframework.cloud.netflix.hystrix.EnableHystrix; @SpringBootApplication @EnableEurekaClient +@EnableHystrix //@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyselfRule.class) public class OrderMain80 { public static void main(String[] args) { diff --git a/cloud-consumer-order80/src/main/resources/application.yml b/cloud-consumer-order80/src/main/resources/application.yml index 206d825..3359090 100644 --- a/cloud-consumer-order80/src/main/resources/application.yml +++ b/cloud-consumer-order80/src/main/resources/application.yml @@ -3,12 +3,15 @@ server: spring: application: - name: cloud-order-service + name: cloud-order-com.bdc.springcloud.service eureka: client: register-with-eureka: true fetchRegistry: true service-url: - #defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版 - defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #单机 + #defaultZone: http://127.0.0.1:7001/eureka,http://eureka7002.com:7002/eureka #集群版 + defaultZone: http://127.0.0.1:7001/eureka,http://eureka7002.com:7002/eureka #单机 +feign: + hystrix: + enabled: true #如果处理自身的容错就开启。开启方式与生产端不一样。 diff --git a/cloud-eureka-server7001/src/main/resources/application.yml b/cloud-eureka-server7001/src/main/resources/application.yml index 904ae40..eaa383a 100644 --- a/cloud-eureka-server7001/src/main/resources/application.yml +++ b/cloud-eureka-server7001/src/main/resources/application.yml @@ -3,13 +3,13 @@ server: eureka: instance: - hostname: eureka7001.com #eureka服务端的实例名字 + hostname: 127.0.0.1 #eureka服务端的实例名字 client: register-with-eureka: false #表识不向注册中心注册自己 fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 service-url: #defaultZone: http://eureka7002.com:7002/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址 集群 - defaultZone: http://eureka7001.com:7001/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址 单机 + defaultZone: http://127.0.0.1:7001/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址 单机 #server: #enable-self-preservation: false #eviction-interval-timer-in-ms: 2000 diff --git a/cloud-eureka-server7002/src/main/resources/application.yml b/cloud-eureka-server7002/src/main/resources/application.yml index 04fe773..b71d2ee 100644 --- a/cloud-eureka-server7002/src/main/resources/application.yml +++ b/cloud-eureka-server7002/src/main/resources/application.yml @@ -8,5 +8,5 @@ eureka: register-with-eureka: false #表识不向注册中心注册自己 fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 service-url: - defaultZone: http://eureka7001.com:7001/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址 + defaultZone: http://127.0.0.1:7001/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址 diff --git a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java index b345937..8d05273 100644 --- a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java +++ b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java @@ -3,9 +3,11 @@ package com.bdc.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.netflix.hystrix.EnableHystrix; @SpringBootApplication @EnableEurekaClient +@EnableHystrix public class PaymentHystrixMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentHystrixMain8001.class,args); diff --git a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java index a130b9d..163b56c 100644 --- a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java +++ b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java @@ -1,5 +1,7 @@ package com.bdc.springcloud.service; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; import org.springframework.stereotype.Service; import java.util.concurrent.TimeUnit; @@ -12,9 +14,16 @@ public class PaymentService { } //失败 + @HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHadler",commandProperties = { + @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000") + }) public String paymentInfo_TimeOut(Integer id){ - int timeNumber = 3; + int timeNumber = 5; try { TimeUnit.SECONDS.sleep(timeNumber); }catch (Exception e) {e.printStackTrace();} return "线程池:"+Thread.currentThread().getName()+" paymentInfo_TimeOut,id: "+id+"\t"+"呜呜呜"+" 耗时(秒)"+timeNumber; } + + public String paymentInfo_TimeOutHadler(Integer id){ + return "线程池:"+Thread.currentThread().getName()+" paymentInfo_TimeOutHadler,id: "+id+"\t"+"呜呜呜"; + } } diff --git a/cloud-provider-hystrix-payment8001/src/main/resources/application.yml b/cloud-provider-hystrix-payment8001/src/main/resources/application.yml index 9439d2a..46d8075 100644 --- a/cloud-provider-hystrix-payment8001/src/main/resources/application.yml +++ b/cloud-provider-hystrix-payment8001/src/main/resources/application.yml @@ -6,7 +6,7 @@ eureka: fetch-registry: true #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 service-url: # defaultZone: http://eureka7002.com:7002/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址 - defaultZone: http://eureka7001.com:7001/eureka/ + defaultZone: http://127.0.0.1:7001/eureka/ instance: instance-id: cloud-provider-hystrix-payment8001 prefer-ip-address: true @@ -16,3 +16,8 @@ spring: application: name: cloud-provider-hystrix-payment # eviction-interval-timer-in-ms: 2000 + +feign: + hystrix: + enabled: true #如果处理自身的容错就开启。开启方式与生产端不一样。 + diff --git a/cloud-provider-payment-8001/src/main/resources/application.yml b/cloud-provider-payment-8001/src/main/resources/application.yml index 8987c1f..0b855b9 100644 --- a/cloud-provider-payment-8001/src/main/resources/application.yml +++ b/cloud-provider-payment-8001/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: spring: application: - name: cloud-payment-service + name: cloud-payment-com.bdc.springcloud.service datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver @@ -16,8 +16,8 @@ eureka: register-with-eureka: true fetchRegistry: true service-url: - #defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版 - defaultZone: http://eureka7001.com:7001/eureka #单机 + #defaultZone: http://127.0.0.1:7001/eureka,http://eureka7002.com:7002/eureka #集群版 + defaultZone: http://127.0.0.1:7001/eureka #单机 instance: instance-id: payment8001 prefer-ip-address: true diff --git a/cloud-provider-payment-8002/src/main/resources/application.yml b/cloud-provider-payment-8002/src/main/resources/application.yml index b428933..805d4d5 100644 --- a/cloud-provider-payment-8002/src/main/resources/application.yml +++ b/cloud-provider-payment-8002/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: spring: application: - name: cloud-payment-service + name: cloud-payment-com.bdc.springcloud.service datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver @@ -16,7 +16,7 @@ eureka: register-with-eureka: true fetchRegistry: true service-url: - defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版 + defaultZone: http://127.0.0.1:7001/eureka,http://eureka7002.com:7002/eureka #集群版 instance: instance-id: payment8002 prefer-ip-address: true diff --git a/pom.xml b/pom.xml index 3841670..8aad028 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ cloud-provider-payment-8002 cloud-consumer-feign-order80 cloud-provider-hystrix-payment8001 + cloud-consumer-feign-hystrix-order80 cloud20220 @@ -117,6 +118,7 @@ org.springframework.boot spring-boot-maven-plugin + 2.2.6.RELEASE true true -- Gitee From 49d0817b4719efbf8c5066b5c405baf6f49ed78d Mon Sep 17 00:00:00 2001 From: DesNoix Date: Wed, 14 Jul 2021 20:46:38 +0800 Subject: [PATCH 2/3] feature: --- cloud-consumer-hystrix-dashboard9001/pom.xml | 50 +++++++++++++++ .../springcloud/HystrixDashboardMain9001.java | 21 +++++++ .../src/main/resources/application.yml | 2 + cloud-gateway-gateway9527/pom.xml | 63 +++++++++++++++++++ .../com/bdc/springcloud/GateWayMain9527.java | 22 +++++++ .../bdc/springcloud/config/GateWayConfig.java | 24 +++++++ .../src/main/resources/application.yml | 33 ++++++++++ cloud-provider-hystrix-payment8001/pom.xml | 1 - .../springcloud/PaymentHystrixMain8001.java | 16 +++++ .../controller/PaymentController.java | 8 +++ .../springcloud/service/PaymentService.java | 22 +++++++ .../controller/PaymentController.java | 6 ++ .../springcloud/service/PaymentService.java | 2 + .../service/impl/PaymentServiceImpl.java | 8 +++ .../src/main/resources/application.yml | 4 +- .../src/main/resources/application.yml | 2 +- pom.xml | 2 + 17 files changed, 282 insertions(+), 4 deletions(-) create mode 100644 cloud-consumer-hystrix-dashboard9001/pom.xml create mode 100644 cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java create mode 100644 cloud-consumer-hystrix-dashboard9001/src/main/resources/application.yml create mode 100644 cloud-gateway-gateway9527/pom.xml create mode 100644 cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/GateWayMain9527.java create mode 100644 cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/config/GateWayConfig.java create mode 100644 cloud-gateway-gateway9527/src/main/resources/application.yml diff --git a/cloud-consumer-hystrix-dashboard9001/pom.xml b/cloud-consumer-hystrix-dashboard9001/pom.xml new file mode 100644 index 0000000..2b14119 --- /dev/null +++ b/cloud-consumer-hystrix-dashboard9001/pom.xml @@ -0,0 +1,50 @@ + + + + cloud20220 + com.bdc.springcloud + 1.0-SNAPSHOT + + 4.0.0 + + cloud-consumer-hystrix-dashboard9001 + + + + + + org.springframework.cloud + spring-cloud-starter-netflix-hystrix-dashboard + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + 8 + 8 + + + \ No newline at end of file diff --git a/cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java b/cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java new file mode 100644 index 0000000..49e8697 --- /dev/null +++ b/cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java @@ -0,0 +1,21 @@ +package com.bdc.springcloud; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; + +/** + * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
+ * + * @Description: HystrixDashboardMain9001 + * @Project: cloud20220 + * @CreateDate: Created in 2021/4/14 23:02
+ * @Author: gdmz_jqyang@outlook.com + */ +@SpringBootApplication +@EnableHystrixDashboard +public class HystrixDashboardMain9001 { + public static void main(String[] args) { + SpringApplication.run(HystrixDashboardMain9001.class,args); + } +} diff --git a/cloud-consumer-hystrix-dashboard9001/src/main/resources/application.yml b/cloud-consumer-hystrix-dashboard9001/src/main/resources/application.yml new file mode 100644 index 0000000..7fd7798 --- /dev/null +++ b/cloud-consumer-hystrix-dashboard9001/src/main/resources/application.yml @@ -0,0 +1,2 @@ +server: + port: 9001 diff --git a/cloud-gateway-gateway9527/pom.xml b/cloud-gateway-gateway9527/pom.xml new file mode 100644 index 0000000..7d5b53b --- /dev/null +++ b/cloud-gateway-gateway9527/pom.xml @@ -0,0 +1,63 @@ + + + + cloud20220 + com.bdc.springcloud + 1.0-SNAPSHOT + + 4.0.0 + + cloud-gateway-gateway9527 + + + 8 + 8 + + + + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + com.bdc.springcloud + cloud-api-commons + 1.0-SNAPSHOT + + + + org.springframework.cloud + spring-cloud-starter-netflix-hystrix + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + \ No newline at end of file diff --git a/cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/GateWayMain9527.java b/cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/GateWayMain9527.java new file mode 100644 index 0000000..01582c6 --- /dev/null +++ b/cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/GateWayMain9527.java @@ -0,0 +1,22 @@ +package com.bdc.springcloud; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +/** + * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
+ * + * @Description: GateWayMain9527 + * @Project: cloud20220 + * @CreateDate: Created in 2021/4/14 23:37
+ * @Author: gdmz_jqyang@outlook.com + */ +@SpringBootApplication +@EnableEurekaClient +public class GateWayMain9527 { + + public static void main(String[] args) { + SpringApplication.run( GateWayMain9527.class,args); + } +} diff --git a/cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/config/GateWayConfig.java b/cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/config/GateWayConfig.java new file mode 100644 index 0000000..4ad920a --- /dev/null +++ b/cloud-gateway-gateway9527/src/main/java/com/bdc/springcloud/config/GateWayConfig.java @@ -0,0 +1,24 @@ +package com.bdc.springcloud.config; + +import org.springframework.cloud.gateway.route.RouteLocator; +import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
+ * + * @Description: GateWayConfig + * @Project: cloud20220 + * @CreateDate: Created in 2021/4/15 00:01
+ * @Author: gdmz_jqyang@outlook.com + */ +@Configuration +public class GateWayConfig { + @Bean + public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) { + RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes(); + routes.route("path_rote_atguigu", r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build(); + return routes.build(); + } +} diff --git a/cloud-gateway-gateway9527/src/main/resources/application.yml b/cloud-gateway-gateway9527/src/main/resources/application.yml new file mode 100644 index 0000000..5abfa77 --- /dev/null +++ b/cloud-gateway-gateway9527/src/main/resources/application.yml @@ -0,0 +1,33 @@ +server: + port: 9527 +spring: + application: + name: cloud-gateway + cloud: + gateway: + routes: + - id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名 + #uri: http://localhost:8001 #匹配后提供服务的路由地址 + uri: lb://cloud-payment-service + predicates: + - Path=/payment/get/** #断言,路径相匹配的进行路由 + + - id: payment_routh2 + #uri: http://localhost:8001 + uri: lb://cloud-payment-service + predicates: + - Path=/payment/lb/** #断言,路径相匹配的进行路由 + discovery: + locator: + enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由 + + +eureka: + instance: + hostname: cloud-gateway-service + client: + service-url: + register-with-eureka: true + fetch-registry: true + defaultZone: http://127.0.0.1:7001/eureka + diff --git a/cloud-provider-hystrix-payment8001/pom.xml b/cloud-provider-hystrix-payment8001/pom.xml index f28f574..90e4728 100644 --- a/cloud-provider-hystrix-payment8001/pom.xml +++ b/cloud-provider-hystrix-payment8001/pom.xml @@ -28,7 +28,6 @@ spring-cloud-starter-netflix-eureka-client - com.bdc.springcloud cloud-api-commons diff --git a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java index 8d05273..d18ed6c 100644 --- a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java +++ b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/PaymentHystrixMain8001.java @@ -1,15 +1,31 @@ package com.bdc.springcloud; +import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.hystrix.EnableHystrix; +import org.springframework.context.annotation.Bean; @SpringBootApplication @EnableEurekaClient @EnableHystrix +@EnableCircuitBreaker public class PaymentHystrixMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentHystrixMain8001.class,args); } + + + @Bean + public ServletRegistrationBean getServlet(){ + HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet(); + ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet); + registrationBean.setLoadOnStartup(1); + registrationBean.addUrlMappings("/hystrix.stream"); + registrationBean.setName("HystrixMetricsStreamServlet"); + return registrationBean; + } } diff --git a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java index 143642f..7a99a4f 100644 --- a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java +++ b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java @@ -39,4 +39,12 @@ public class PaymentController { log.info("*******result:"+result); return result; } + //===服务熔断 + @GetMapping("/payment/circuit/{id}") + public String paymentCircuitBreaker(@PathVariable("id") Integer id){ + String result = paymentService.paymentCircuitBreaker(id); + log.info("*******result:"+result); + return result; + } + } diff --git a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java index 163b56c..8a3a4f0 100644 --- a/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java +++ b/cloud-provider-hystrix-payment8001/src/main/java/com/bdc/springcloud/service/PaymentService.java @@ -1,8 +1,10 @@ package com.bdc.springcloud.service; +import cn.hutool.core.util.IdUtil; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PathVariable; import java.util.concurrent.TimeUnit; @@ -26,4 +28,24 @@ public class PaymentService { public String paymentInfo_TimeOutHadler(Integer id){ return "线程池:"+Thread.currentThread().getName()+" paymentInfo_TimeOutHadler,id: "+id+"\t"+"呜呜呜"; } + + //服务熔断 + @HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = { + @HystrixProperty(name = "circuitBreaker.enabled",value = "true"), //是否开启断路器 + @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"), //请求次数 + @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), //时间范围 + @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), //失败率达到多少后跳闸 + }) + public String paymentCircuitBreaker(@PathVariable("id") Integer id){ + if (id < 0){ + throw new RuntimeException("*****id 不能负数"); + } + String serialNumber = IdUtil.simpleUUID(); + + return Thread.currentThread().getName()+"\t"+"调用成功,流水号:"+serialNumber; + } + public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id){ + return "id 不能负数,请稍候再试,(┬_┬)/~~ id: " +id; + } + } diff --git a/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java b/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java index 097d420..545016e 100644 --- a/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java +++ b/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/controller/PaymentController.java @@ -69,6 +69,12 @@ public class PaymentController { return serverPort; } + @GetMapping(value = "/payment/testRequest") + public String testRequest(){ + paymentService.tetsRequest(); + return serverPort; + } + @GetMapping(value = "/payment/feign/timeout") public String paymentFeignTimeout(){ diff --git a/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/PaymentService.java b/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/PaymentService.java index 9feeaa9..a7cc784 100644 --- a/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/PaymentService.java +++ b/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/PaymentService.java @@ -7,4 +7,6 @@ public interface PaymentService { public int create(Payment payment); public Payment getPaymentById(@Param("id")Long id); + + public void tetsRequest(); } diff --git a/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/impl/PaymentServiceImpl.java b/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/impl/PaymentServiceImpl.java index 6a03bf6..a06a743 100644 --- a/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/impl/PaymentServiceImpl.java +++ b/cloud-provider-payment-8001/src/main/java/com/bdc/springcloud/service/impl/PaymentServiceImpl.java @@ -4,6 +4,8 @@ import com.bdc.springcloud.dao.PaymentDao; import com.bdc.springcloud.entities.Payment; import com.bdc.springcloud.service.PaymentService; import org.springframework.stereotype.Service; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; @@ -22,4 +24,10 @@ public class PaymentServiceImpl implements PaymentService { public Payment getPaymentById(Long id) { return paymentDao.getPaymentById(id); } + + @Override + public void tetsRequest() { + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + System.out.println(requestAttributes.getRequest()); + } } diff --git a/cloud-provider-payment-8001/src/main/resources/application.yml b/cloud-provider-payment-8001/src/main/resources/application.yml index 0b855b9..5f5c94d 100644 --- a/cloud-provider-payment-8001/src/main/resources/application.yml +++ b/cloud-provider-payment-8001/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8001 + port: 8002 spring: application: @@ -9,7 +9,7 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db2020?characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=UTC username: root - password: 123456789 + password: 123456 eureka: client: diff --git a/cloud-provider-payment-8002/src/main/resources/application.yml b/cloud-provider-payment-8002/src/main/resources/application.yml index 805d4d5..abff3c9 100644 --- a/cloud-provider-payment-8002/src/main/resources/application.yml +++ b/cloud-provider-payment-8002/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: spring: application: - name: cloud-payment-com.bdc.springcloud.service + name: cloud-payment-service datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/pom.xml b/pom.xml index 8aad028..c51c283 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,8 @@ cloud-consumer-feign-order80 cloud-provider-hystrix-payment8001 cloud-consumer-feign-hystrix-order80 + cloud-consumer-hystrix-dashboard9001 + cloud-gateway-gateway9527 cloud20220 -- Gitee From 31f6ccabc62a26fcfb605813765c8a5273181b7a Mon Sep 17 00:00:00 2001 From: DesNoix Date: Wed, 14 Jul 2021 20:59:53 +0800 Subject: [PATCH 3/3] feature: --- .../main/java/com/bdc/springcloud/HystrixDashboardMain9001.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java b/cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java index 49e8697..4a9c721 100644 --- a/cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java +++ b/cloud-consumer-hystrix-dashboard9001/src/main/java/com/bdc/springcloud/HystrixDashboardMain9001.java @@ -7,7 +7,7 @@ import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboar /** * gdmz_jqyang@outlook.com 版权所有 © Copyright 2020
* - * @Description: HystrixDashboardMain9001 + * @Description: HystrixDashboardMain * @Project: cloud20220 * @CreateDate: Created in 2021/4/14 23:02
* @Author: gdmz_jqyang@outlook.com -- Gitee