diff --git a/pom.xml b/pom.xml
index 7ea2a294098ae47aac955fb58cfad04988bc04fc..ac8bf57beb72340476698f987fc3c09a8edc3fb1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,7 @@
springcloud-service-feign
springcloud-service-zuul
springcloud-service-consul
+ springcloud-service-hystrix-dashboard
springcloud-service-eureka
diff --git a/springcloud-service-feign/src/main/java/com/kwan/springcloud/FeignApplication.java b/springcloud-service-feign/src/main/java/com/kwan/springcloud/FeignApplication.java
index a70cd57da4f08203dd23b4d12677e626f5bb24c5..c31b391d4b9ce51fcaa202106b35796dae2c6c82 100644
--- a/springcloud-service-feign/src/main/java/com/kwan/springcloud/FeignApplication.java
+++ b/springcloud-service-feign/src/main/java/com/kwan/springcloud/FeignApplication.java
@@ -6,6 +6,16 @@ import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
+
+
+/**
+ *
+ *
+ * http://localhost:8081/feign/1
+ *@version : 2.2.0
+ *@author : qinyingjie
+ *@date : 2023/1/14 16:13
+ */
@EnableCircuitBreaker
@EnableFeignClients
@EnableEurekaClient
diff --git a/springcloud-service-feign/src/main/java/com/kwan/springcloud/api/ComputeClientHystrix.java b/springcloud-service-feign/src/main/java/com/kwan/springcloud/api/ComputeClientHystrix.java
index a70fc7e3cc649f94c0e15c745b4948482d77266a..d291e050d4d10306113f5b81233911e43ba3e98a 100644
--- a/springcloud-service-feign/src/main/java/com/kwan/springcloud/api/ComputeClientHystrix.java
+++ b/springcloud-service-feign/src/main/java/com/kwan/springcloud/api/ComputeClientHystrix.java
@@ -7,7 +7,6 @@ import java.io.Serializable;
@Component
public class ComputeClientHystrix implements ComputeClient {
-
@Override
public Result selectOne(Serializable id) {
return Result.error("feign方式请求 服务不可用 请求失败");
diff --git a/springcloud-service-feign/src/main/java/com/kwan/springcloud/service/FeignService.java b/springcloud-service-feign/src/main/java/com/kwan/springcloud/service/FeignService.java
index 37072a0f31532a85d57b4e2b0f5428352022f6fb..cf35f76e6ab36fb48314c140462af9d089aa4b8f 100644
--- a/springcloud-service-feign/src/main/java/com/kwan/springcloud/service/FeignService.java
+++ b/springcloud-service-feign/src/main/java/com/kwan/springcloud/service/FeignService.java
@@ -1,40 +1,20 @@
package com.kwan.springcloud.service;
+import com.kwan.springcloud.api.ComputeClient;
import com.kwan.springcloud.response.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.web.client.RestTemplate;
@Slf4j
@Service
public class FeignService {
- /**
- * http直接访问
- */
- private static final String GOODS_URL = "http://localhost:9100/kwanGoodsInfo/";
-
-
- /**
- * eureka访问
- */
- private static final String GOODS_URL_2 = "http://goods-service/kwanGoodsInfo/";
-
-
@Autowired
- RestTemplate restTemplate;
+ private ComputeClient computeClient;
- // @HystrixCommand(fallbackMethod = "addServiceFallback")
- public Result addService(String id) {
- //调用远程的controller
- return restTemplate.getForEntity(GOODS_URL_2 + id, Result.class).getBody();
- }
-
- public Result addServiceFallback(String id) {
- log.info("失败id={}", id);
- return Result.error("ribbon方式请求 服务不可用 请求失败");
+ public Result addService(String id) {
+ return computeClient.selectOne(id);
}
-
}
diff --git a/springcloud-service-feign/src/main/resources/application.yaml b/springcloud-service-feign/src/main/resources/application.yaml
index c3ded33e9b3338f3a261448021d0b4b4b3f438dc..345c353366783a876831766453b7ecc29dce1ca9 100644
--- a/springcloud-service-feign/src/main/resources/application.yaml
+++ b/springcloud-service-feign/src/main/resources/application.yaml
@@ -10,4 +10,8 @@ spring:
eureka:
client:
service-url:
- defaultZone: http://eureka8767:8767/eureka/,http://eureka8768:8768/eureka/,http://eureka8769:8769/eureka/
\ No newline at end of file
+ defaultZone: http://eureka8767:8767/eureka/,http://eureka8768:8768/eureka/,http://eureka8769:8769/eureka/
+
+feign:
+ hystrix:
+ enabled: true
\ No newline at end of file
diff --git a/springcloud-service-hystrix-dashboard/pom.xml b/springcloud-service-hystrix-dashboard/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..25d4e3434f3aeb3c8c0348095536e4a835aa660c
--- /dev/null
+++ b/springcloud-service-hystrix-dashboard/pom.xml
@@ -0,0 +1,49 @@
+
+
+ 4.0.0
+
+ com.kwan.springcloud
+ springcloud-service-parent
+ 1.0.0
+
+ springcloud-service-hystrix-dashboard
+ 0.0.1-SNAPSHOT
+ springcloud-service-hystrix-dashboard
+
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix-dashboard
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/springcloud-service-hystrix-dashboard/src/main/java/com/kwan/springcloud/HystrixDashboardApplication.java b/springcloud-service-hystrix-dashboard/src/main/java/com/kwan/springcloud/HystrixDashboardApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..722e420d3daad52487da865f61b8b8d36f4dc700
--- /dev/null
+++ b/springcloud-service-hystrix-dashboard/src/main/java/com/kwan/springcloud/HystrixDashboardApplication.java
@@ -0,0 +1,22 @@
+package com.kwan.springcloud;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
+/**
+ *
+ * http://localhost:9909/hystrix
+ *@version : 2.2.0
+ *@author : qinyingjie
+ *@date : 2023/1/14 15:33
+ */
+@EnableHystrixDashboard
+@SpringBootApplication
+public class HystrixDashboardApplication {
+
+ public static void main(String[] args) {
+
+ SpringApplication.run(HystrixDashboardApplication.class, args);
+ }
+}
diff --git a/springcloud-service-hystrix-dashboard/src/main/resources/application.yaml b/springcloud-service-hystrix-dashboard/src/main/resources/application.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b921836e068209b5c3320b6058f60a6b2cff91f1
--- /dev/null
+++ b/springcloud-service-hystrix-dashboard/src/main/resources/application.yaml
@@ -0,0 +1,7 @@
+#端口号
+server:
+ port: 9909
+
+spring:
+ application:
+ name: hystrix-dashboard-service #服务名称
\ No newline at end of file
diff --git a/springcloud-service-hystrix-dashboard/src/test/java/com/kwan/springcloud/HystrixDashboardApplicationTests.java b/springcloud-service-hystrix-dashboard/src/test/java/com/kwan/springcloud/HystrixDashboardApplicationTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..c4f4a371d9ced08bac9cbe99df8706c19c797bad
--- /dev/null
+++ b/springcloud-service-hystrix-dashboard/src/test/java/com/kwan/springcloud/HystrixDashboardApplicationTests.java
@@ -0,0 +1,13 @@
+package com.kwan.springcloud;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class HystrixDashboardApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/springcloud-service-portal/pom.xml b/springcloud-service-portal/pom.xml
index 9fb6d1186e993051f291d083c6d5ced33f0aaf25..9fb6186bb77d5ec1fabbf7db093f00ec285004d7 100644
--- a/springcloud-service-portal/pom.xml
+++ b/springcloud-service-portal/pom.xml
@@ -29,6 +29,17 @@
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
+
+ org.springframework.cloud
+ spring-cloud-openfeign-core
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-hystrix
+ 1.4.7.RELEASE
+
+
diff --git a/springcloud-service-portal/src/main/java/com/kwan/springcloud/PortalApplication.java b/springcloud-service-portal/src/main/java/com/kwan/springcloud/PortalApplication.java
index d278f2f925dc3b050734e8429d9379a13bea0c36..63e16ab16255c5e6bda9eaabc66027a5d8bfd601 100644
--- a/springcloud-service-portal/src/main/java/com/kwan/springcloud/PortalApplication.java
+++ b/springcloud-service-portal/src/main/java/com/kwan/springcloud/PortalApplication.java
@@ -3,8 +3,17 @@ package com.kwan.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;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+/**
+ *
+ * http://localhost:8080/portal/hystrix/1
+ *@version : 2.2.0
+ *@author : qinyingjie
+ *@date : 2023/1/14 16:07
+ */
+@EnableFeignClients
+@EnableHystrix
@EnableEurekaClient
@SpringBootApplication
public class PortalApplication {
diff --git a/springcloud-service-portal/src/main/java/com/kwan/springcloud/controller/PortalController.java b/springcloud-service-portal/src/main/java/com/kwan/springcloud/controller/PortalController.java
index 0f05405b7467dd09d819c0cef435ad138c8fcaa2..6fac257939697cc3271bb3d508f536b26f458259 100644
--- a/springcloud-service-portal/src/main/java/com/kwan/springcloud/controller/PortalController.java
+++ b/springcloud-service-portal/src/main/java/com/kwan/springcloud/controller/PortalController.java
@@ -24,6 +24,17 @@ public class PortalController {
@Autowired
private PortalService portalService;
+ /**
+ * 通过主键查询单条数据
+ *
+ * @param id 主键
+ * @return 单条数据
+ */
+ @GetMapping(value = "/hystrix/{id}", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE)
+ public Result hystrix(@PathVariable String id) {
+ return portalService.hystrix(id);
+ }
+
/**
* 通过主键查询单条数据
*
@@ -40,4 +51,6 @@ public class PortalController {
public Result test() {
return Result.ok("portal 访问成功");
}
+
+
}
\ No newline at end of file
diff --git a/springcloud-service-portal/src/main/java/com/kwan/springcloud/service/PortalService.java b/springcloud-service-portal/src/main/java/com/kwan/springcloud/service/PortalService.java
index 4f7f62a99a1fdc75874b598ee7cef52f03304970..49e49d58127b946d818d8eaf92037d80e7e1e74e 100644
--- a/springcloud-service-portal/src/main/java/com/kwan/springcloud/service/PortalService.java
+++ b/springcloud-service-portal/src/main/java/com/kwan/springcloud/service/PortalService.java
@@ -1,6 +1,7 @@
package com.kwan.springcloud.service;
import com.kwan.springcloud.response.Result;
+import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -9,26 +10,42 @@ import org.springframework.web.client.RestTemplate;
@Slf4j
@Service
public class PortalService {
-
/**
* http直接访问
*/
private static final String GOODS_URL = "http://localhost:9100/kwanGoodsInfo/";
-
-
/**
* eureka访问
*/
private static final String GOODS_URL_2 = "http://goods-service/kwanGoodsInfo/";
-
@Autowired
RestTemplate restTemplate;
-
public Result addService(String id) {
//调用远程的controller
return restTemplate.getForEntity(GOODS_URL_2 + id, Result.class).getBody();
}
+ @HystrixCommand(fallbackMethod = "addServiceFallback")
+ public Result hystrix(String id) {
+
+ //1·服务超时,会降级
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ //2.服务异常,会降级
+ String str = null;
+ if (str == null) {
+ throw new RuntimeException("服务异常了.");
+ }
+ return restTemplate.getForEntity(GOODS_URL_2 + id, Result.class).getBody();
+ }
+ public Result addServiceFallback(String id) {
+ log.info("失败id={}", id);
+// return Result.error("请求超时 服务不可用 请求失败");
+ return Result.error("请求异常 服务不可用 请求失败");
+ }
}
diff --git a/springcloud-service-portal/src/main/resources/application.yaml b/springcloud-service-portal/src/main/resources/application.yaml
index bde245ad34d9cd4834f58ed50dddfb27a1b877ca..21cf8a7b49b92e261d910209e3e404542dda9fe7 100644
--- a/springcloud-service-portal/src/main/resources/application.yaml
+++ b/springcloud-service-portal/src/main/resources/application.yaml
@@ -10,4 +10,16 @@ spring:
eureka:
client:
service-url:
- defaultZone: http://eureka8767:8767/eureka/,http://eureka8768:8768/eureka/,http://eureka8769:8769/eureka/
\ No newline at end of file
+ defaultZone: http://eureka8767:8767/eureka/,http://eureka8768:8768/eureka/,http://eureka8769:8769/eureka/
+
+
+
+feign.hystrix.enabled=true
+ hystrix.command.default.execution.timeout.enabled=true
+ hystrix.command.default.execution.isolation.thread.timeoutInMi
+ 1liseconds=5000
+ 如果hystrix.command.default.execution.timeout.enabled为true,则会有两
+ 个执行方法超时的配置,一个就是ribbon的ReadTimeout,一个就是熔断器
+ I
+ hystrix的timeoutInMilliseconds,此时谁的值小谁生效;
+ 如果hystrix.command.default.execution.timeout.enabled为false,则熔断
\ No newline at end of file