From 5d46285aceefaacc8ba10f6ea96c72d301c849b8 Mon Sep 17 00:00:00 2001
From: YunaiV <>
Date: Fri, 15 May 2020 09:20:51 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20Dubbo=20+=20Hystrix=20?=
=?UTF-8?q?=E5=85=A5=E9=97=A8=E7=A4=BA=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lab-57/lab-57-hystrix-demo01/pom.xml | 4 -
.../hystrixdemo/config/HystrixConfig.java | 2 +-
.../pom.xml | 85 +++++++++++++++++++
.../labx23/demo/DemoApplication.java | 15 ++++
.../demo/controller/DemoController.java | 35 ++++++++
.../src/main/resources/application.yaml | 17 ++++
.../pom.xml | 14 +++
.../lab57/userservice/api/UserService.java | 7 ++
.../pom.xml | 73 ++++++++++++++++
.../userservice/UserServiceApplication.java | 13 +++
.../userservice/service/UserServiceImpl.java | 13 +++
.../src/main/resources/application.yaml | 24 ++++++
lab-57/lab-57-hystrix-dubbo-demo/pom.xml | 22 +++++
lab-57/lab-57-user-service/pom.xml | 4 -
lab-57/pom.xml | 1 +
15 files changed, 320 insertions(+), 9 deletions(-)
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/pom.xml
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/DemoApplication.java
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/controller/DemoController.java
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/resources/application.yaml
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/pom.xml
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/src/main/java/cn/iocoder/springboot/lab57/userservice/api/UserService.java
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/pom.xml
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/UserServiceApplication.java
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/service/UserServiceImpl.java
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/resources/application.yaml
create mode 100644 lab-57/lab-57-hystrix-dubbo-demo/pom.xml
diff --git a/lab-57/lab-57-hystrix-demo01/pom.xml b/lab-57/lab-57-hystrix-demo01/pom.xml
index d07626bc..796d6999 100644
--- a/lab-57/lab-57-hystrix-demo01/pom.xml
+++ b/lab-57/lab-57-hystrix-demo01/pom.xml
@@ -17,10 +17,6 @@
2.2.4.RELEASE
-
diff --git a/lab-57/lab-57-hystrix-demo01/src/main/java/cn/iocoder/springboot/lab57/hystrixdemo/config/HystrixConfig.java b/lab-57/lab-57-hystrix-demo01/src/main/java/cn/iocoder/springboot/lab57/hystrixdemo/config/HystrixConfig.java
index 9558e570..953308fd 100644
--- a/lab-57/lab-57-hystrix-demo01/src/main/java/cn/iocoder/springboot/lab57/hystrixdemo/config/HystrixConfig.java
+++ b/lab-57/lab-57-hystrix-demo01/src/main/java/cn/iocoder/springboot/lab57/hystrixdemo/config/HystrixConfig.java
@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
-@EnableAspectJAutoProxy
+@EnableAspectJAutoProxy // 开启 AOP 代理的支持
public class HystrixConfig {
@Bean
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/pom.xml b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/pom.xml
new file mode 100644
index 00000000..69610e60
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/pom.xml
@@ -0,0 +1,85 @@
+
+
+
+ lab-57-hystrix-dubbo-demo
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ lab-57-hystrix-dubbo-demo-application
+
+
+ 1.8
+ 1.8
+ 2.2.4.RELEASE
+ Hoxton.SR1
+ 2.2.0.RELEASE
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring.boot.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring.cloud.version}
+ pom
+ import
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring.cloud.alibaba.version}
+ pom
+ import
+
+
+
+
+
+
+
+ cn.iocoder.springboot.labs
+ lab-57-hystrix-dubbo-demo-user-service-api
+ 1.0-SNAPSHOT
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+
+
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/DemoApplication.java b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/DemoApplication.java
new file mode 100644
index 00000000..fc9b5e6c
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/DemoApplication.java
@@ -0,0 +1,15 @@
+package cn.iocoder.springcloud.labx23.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
+
+@SpringBootApplication
+@EnableCircuitBreaker // 声明开启断路器
+public class DemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoApplication.class, args);
+ }
+
+}
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/controller/DemoController.java b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/controller/DemoController.java
new file mode 100644
index 00000000..ae52860f
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/java/cn/iocoder/springcloud/labx23/demo/controller/DemoController.java
@@ -0,0 +1,35 @@
+package cn.iocoder.springcloud.labx23.demo.controller;
+
+import cn.iocoder.springcloud.labx23.userservice.api.UserService;
+import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
+import org.apache.commons.lang.exception.ExceptionUtils;
+import org.apache.dubbo.config.annotation.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/demo")
+public class DemoController {
+
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Reference(protocol = "dubbo", version = "1.0.0")
+ private UserService userService;
+
+ @GetMapping("/get_user")
+ @HystrixCommand(fallbackMethod = "getUserFallback")
+ public String getUser(@RequestParam("id") Integer id) {
+ logger.info("[getUser][准备调用 user-service 获取用户({})详情]", id);
+ return userService.getUser(id);
+ }
+
+ public String getUserFallback(Integer id, Throwable throwable) {
+ logger.info("[getUserFallback][id({}) exception({})]", id, ExceptionUtils.getRootCauseMessage(throwable));
+ return "mock:User:" + id;
+ }
+
+}
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/resources/application.yaml b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/resources/application.yaml
new file mode 100644
index 00000000..e41d088e
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-application/src/main/resources/application.yaml
@@ -0,0 +1,17 @@
+spring:
+ application:
+ name: demo-consumer
+ cloud:
+ # Nacos 作为注册中心的配置项
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+
+# Dubbo 配置项,对应 DubboConfigurationProperties 类
+dubbo:
+ # Dubbo 服务注册中心配置,对应 RegistryConfig 类
+ registry:
+ address: spring-cloud://127.0.0.1:8848 # 指定 Dubbo 服务注册中心的地址
+ # Spring Cloud Alibaba Dubbo 专属配置项,对应 DubboCloudProperties 类
+ cloud:
+ subscribed-services: user-service # 设置订阅的应用列表,默认为 * 订阅所有应用。
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/pom.xml b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/pom.xml
new file mode 100644
index 00000000..081ce7cb
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/pom.xml
@@ -0,0 +1,14 @@
+
+
+
+ lab-57-hystrix-dubbo-demo
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ lab-57-hystrix-dubbo-demo-user-service-api
+
+
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/src/main/java/cn/iocoder/springboot/lab57/userservice/api/UserService.java b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/src/main/java/cn/iocoder/springboot/lab57/userservice/api/UserService.java
new file mode 100644
index 00000000..71bba3d3
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service-api/src/main/java/cn/iocoder/springboot/lab57/userservice/api/UserService.java
@@ -0,0 +1,7 @@
+package cn.iocoder.springboot.lab57.userservice.api;
+
+public interface UserService {
+
+ String getUser(Integer id);
+
+}
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/pom.xml b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/pom.xml
new file mode 100644
index 00000000..eafc1bf9
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/pom.xml
@@ -0,0 +1,73 @@
+
+
+
+ lab-57-hystrix-dubbo-demo
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ lab-57-hystrix-dubbo-demo-user-service
+
+
+ 1.8
+ 1.8
+ 2.2.4.RELEASE
+ Hoxton.SR1
+ 2.2.0.RELEASE
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring.boot.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring.cloud.version}
+ pom
+ import
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring.cloud.alibaba.version}
+ pom
+ import
+
+
+
+
+
+
+
+ cn.iocoder.springboot.labs
+ lab-57-hystrix-dubbo-demo-user-service-api
+ 1.0-SNAPSHOT
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/UserServiceApplication.java b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/UserServiceApplication.java
new file mode 100644
index 00000000..4c8cff75
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/UserServiceApplication.java
@@ -0,0 +1,13 @@
+package cn.iocoder.springcloud.labx23.userservice;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class UserServiceApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(UserServiceApplication.class);
+ }
+
+}
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/service/UserServiceImpl.java b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/service/UserServiceImpl.java
new file mode 100644
index 00000000..2215bdc3
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/java/cn/iocoder/springcloud/labx23/userservice/service/UserServiceImpl.java
@@ -0,0 +1,13 @@
+package cn.iocoder.springcloud.labx23.userservice.service;
+
+import cn.iocoder.springcloud.labx23.userservice.api.UserService;
+
+@org.apache.dubbo.config.annotation.Service(protocol = "dubbo", version = "1.0.0")
+public class UserServiceImpl implements UserService {
+
+ @Override
+ public String getUser(Integer id) {
+ return "User:" + id;
+ }
+
+}
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/resources/application.yaml b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/resources/application.yaml
new file mode 100644
index 00000000..f62232a7
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/lab-57-hystrix-dubbo-demo-user-service/src/main/resources/application.yaml
@@ -0,0 +1,24 @@
+spring:
+ application:
+ name: user-service
+ cloud:
+ # Nacos 作为注册中心的配置项
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+
+# Dubbo 配置项,对应 DubboConfigurationProperties 类
+dubbo:
+ scan:
+ base-packages: cn.iocoder.springcloud.labx23.userservice.service # 指定 Dubbo 服务实现类的扫描基准包
+ # Dubbo 服务暴露的协议配置,对应 ProtocolConfig Map
+ protocols:
+ dubbo:
+ name: dubbo # 协议名称
+ port: -1 # 协议端口,-1 表示自增端口,从 20880 开始
+ # Dubbo 服务注册中心配置,对应 RegistryConfig 类
+ registry:
+ address: spring-cloud://127.0.0.1:8848 # 指定 Dubbo 服务注册中心的地址
+ # Spring Cloud Alibaba Dubbo 专属配置项,对应 DubboCloudProperties 类
+ cloud:
+ subscribed-services: '' # 设置订阅的应用列表,默认为 * 订阅所有应用。
diff --git a/lab-57/lab-57-hystrix-dubbo-demo/pom.xml b/lab-57/lab-57-hystrix-dubbo-demo/pom.xml
new file mode 100644
index 00000000..d106b161
--- /dev/null
+++ b/lab-57/lab-57-hystrix-dubbo-demo/pom.xml
@@ -0,0 +1,22 @@
+
+
+
+ labx-23
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ lab-57-hystrix-dubbo-demo
+ pom
+
+
+ lab-57-hystrix-dubbo-demo-user-service
+ lab-57-hystrix-dubbo-demo-user-service-api
+ lab-57-hystrix-dubbo-demo-application
+
+
+
+
diff --git a/lab-57/lab-57-user-service/pom.xml b/lab-57/lab-57-user-service/pom.xml
index 508a1975..0040aae3 100644
--- a/lab-57/lab-57-user-service/pom.xml
+++ b/lab-57/lab-57-user-service/pom.xml
@@ -17,10 +17,6 @@
2.2.4.RELEASE
-
diff --git a/lab-57/pom.xml b/lab-57/pom.xml
index b2655be7..4a2dfee4 100644
--- a/lab-57/pom.xml
+++ b/lab-57/pom.xml
@@ -14,6 +14,7 @@
lab-57-user-service
lab-57-hystrix-demo01
+ lab-57-hystrix-dubbo-demo