diff --git a/spring-cloud/spring-cloud-hystrix/common/pom.xml b/spring-cloud/spring-cloud-hystrix/common/pom.xml
new file mode 100644
index 0000000..0e0aa7f
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/common/pom.xml
@@ -0,0 +1,14 @@
+
+
+ 4.0.0
+
+
+ com.heibaiying.hystrix
+ spring-cloud-hystrx
+ 0.0.1-SNAPSHOT
+
+
+ common
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/CommonApplication.java b/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/CommonApplication.java
new file mode 100644
index 0000000..3675fb8
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/CommonApplication.java
@@ -0,0 +1,14 @@
+package com.heibaiying.common;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CommonApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CommonApplication.class, args);
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/api/IProductService.java b/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/api/IProductService.java
new file mode 100644
index 0000000..7296ffd
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/api/IProductService.java
@@ -0,0 +1,18 @@
+package com.heibaiying.common.api;
+
+import com.heibaiying.common.bean.Product;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description : 产品服务接口类
+ */
+public interface IProductService {
+
+ Product queryProductById(int id);
+
+ List queryAllProducts();
+
+ void saveProduct(Product product);
+}
diff --git a/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/bean/Product.java b/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/bean/Product.java
new file mode 100644
index 0000000..75c3f5b
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/common/src/main/java/com/heibaiying/common/bean/Product.java
@@ -0,0 +1,33 @@
+package com.heibaiying.common.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author : heibaiying
+ * @description : 产品实体类
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Product implements Serializable {
+
+ // 产品序列号
+ private long id;
+
+ // 产品名称
+ private String name;
+
+ // 是否贵重品
+ private Boolean isPrecious;
+
+ //生产日期
+ private Date dateInProduced;
+
+ //产品价格
+ private float price;
+}
diff --git a/spring-cloud/spring-cloud-hystrix/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java b/spring-cloud/spring-cloud-hystrix/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java
new file mode 100644
index 0000000..b02d448
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java
@@ -0,0 +1,17 @@
+package com.heibaiying.common;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class CommonApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/pom.xml b/spring-cloud/spring-cloud-hystrix/consumer/pom.xml
new file mode 100644
index 0000000..85c007f
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/pom.xml
@@ -0,0 +1,65 @@
+
+
+ 4.0.0
+
+
+ com.heibaiying.hystrix
+ spring-cloud-hystrx
+ 0.0.1-SNAPSHOT
+
+
+ consumer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+ org.springframework.boot
+ spring-boot-starter-freemarker
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-ribbon
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix-dashboard
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ com.heibaiying.hystrix
+ common
+ 0.0.1-SNAPSHOT
+ compile
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java
new file mode 100644
index 0000000..f57d318
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java
@@ -0,0 +1,33 @@
+package com.heibaiying.consumer;
+
+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.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.netflix.hystrix.EnableHystrix;
+import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableHystrix
+@EnableHystrixDashboard
+public class ConsumerApplication {
+
+ @Bean
+ public ServletRegistrationBean getServlet() {
+ HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
+ ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
+ registrationBean.setLoadOnStartup(1);
+ registrationBean.addUrlMappings("/actuator/hystrix.stream");
+ registrationBean.setName("HystrixMetricsStreamServlet");
+ return registrationBean;
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(ConsumerApplication.class, args);
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/config/RibbonConfig.java b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/config/RibbonConfig.java
new file mode 100644
index 0000000..95f4ead
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/config/RibbonConfig.java
@@ -0,0 +1,21 @@
+package com.heibaiying.consumer.config;
+
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author : heibaiying
+ */
+@Configuration
+public class RibbonConfig {
+
+ @LoadBalanced // 配置客户端负载均衡
+ @Bean
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+}
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java
new file mode 100644
index 0000000..2b5d6f7
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java
@@ -0,0 +1,45 @@
+package com.heibaiying.consumer.controller;
+
+
+import com.heibaiying.common.api.IProductService;
+import com.heibaiying.common.bean.Product;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ */
+@Controller
+@RequestMapping("sell")
+public class SellController {
+
+ @Autowired
+ private IProductService productService;
+
+ @GetMapping("products")
+ public String productList(Model model) {
+ List products = productService.queryAllProducts();
+ model.addAttribute("products", products);
+ return "products";
+ }
+
+ @GetMapping("product/{id}")
+ public String productDetail(@PathVariable int id, Model model) {
+ Product product = productService.queryProductById(id);
+ model.addAttribute("product", product);
+ return "product";
+ }
+
+ @PostMapping("product")
+ public String save(@RequestParam String productName) {
+ long id = Math.round(Math.random() * 100);
+ Product product = new Product(id, productName, false, new Date(), 88);
+ productService.saveProduct(product);
+ return "redirect:products";
+ }
+}
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/service/ProductService.java b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/service/ProductService.java
new file mode 100644
index 0000000..d77f94d
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/main/java/com/heibaiying/consumer/service/ProductService.java
@@ -0,0 +1,46 @@
+package com.heibaiying.consumer.service;
+
+import com.heibaiying.common.api.IProductService;
+import com.heibaiying.common.bean.Product;
+import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
+import com.netflix.ribbon.proxy.annotation.Hystrix;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description : 产品提供接口实现类
+ */
+@Service
+public class ProductService implements IProductService {
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+
+ @HystrixCommand(fallbackMethod = "queryProductsFail")
+ public List queryAllProducts() {
+ ResponseEntity responseEntity = restTemplate.getForEntity("http://producer/products", List.class);
+ List productList = responseEntity.getBody();
+ return productList;
+ }
+
+ public Product queryProductById(int id) {
+ ResponseEntity responseEntity = restTemplate.getForEntity("http://producer/product/{1}", Product.class, id);
+ return responseEntity.getBody();
+ }
+
+
+ public void saveProduct(Product product) {
+ restTemplate.postForObject("http://producer/product", product, Void.class);
+ }
+
+ public List queryProductsFail() {
+ return new ArrayList<>();
+ }
+}
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/application.yml b/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/application.yml
new file mode 100644
index 0000000..76a91fa
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+server:
+ port: 8080
+# 指定服务命名
+spring:
+ application:
+ name: consumer
+# 指定注册中心地址
+eureka:
+ client:
+ serviceUrl:
+ defaultZone: http://localhost:8010/eureka/
+
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/templates/product.ftl b/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/templates/product.ftl
new file mode 100644
index 0000000..729f516
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/templates/product.ftl
@@ -0,0 +1,15 @@
+
+
+
+ 产品详情
+
+
+
+ - 产品名称:${product.name}
+ - 产品序列号:${product.id}
+ - 是否贵重品:${product.isPrecious?string('是','否')}
+ - 生产日期: ${product.dateInProduced?string("yyyy-MM-dd HH:mm:ss")}
+ - 产品价格:${product.price}
+
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/templates/products.ftl b/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/templates/products.ftl
new file mode 100644
index 0000000..c464f40
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/main/resources/templates/products.ftl
@@ -0,0 +1,24 @@
+
+
+
+ 产品列表
+
+
+产品列表:点击查看详情
+
+
+ <#if (products?size>0) >
+ <#list products as product>
+ -
+ ${product.name}
+
+ #list>
+ <#else>
+ 当前排队人数过多,请之后再购买!
+ #if>
+
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java b/spring-cloud/spring-cloud-hystrix/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java
new file mode 100644
index 0000000..82f5399
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java
@@ -0,0 +1,17 @@
+package com.heibaiying.consumer;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class ConsumerApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/eureka/pom.xml b/spring-cloud/spring-cloud-hystrix/eureka/pom.xml
new file mode 100644
index 0000000..fc53853
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/eureka/pom.xml
@@ -0,0 +1,31 @@
+
+
+ 4.0.0
+
+
+ com.heibaiying.hystrix
+ spring-cloud-hystrx
+ 0.0.1-SNAPSHOT
+
+
+ eureka
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-server
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java b/spring-cloud/spring-cloud-hystrix/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java
new file mode 100644
index 0000000..bd54938
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java
@@ -0,0 +1,16 @@
+package com.heibaiying.eureka;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+@SpringBootApplication
+@EnableEurekaServer
+public class EurekaApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(EurekaApplication.class, args);
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/eureka/src/main/resources/application.yml b/spring-cloud/spring-cloud-hystrix/eureka/src/main/resources/application.yml
new file mode 100644
index 0000000..817356d
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/eureka/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+server:
+ port: 8010
+eureka:
+ instance:
+ hostname: localhost
+ client:
+ # 设置为false,代表不向注册中心注册自己
+ register-with-eureka: false
+ # 注册中心主要用于维护服务,并不需要检索服务,所以设置为false
+ fetch-registry: false
+ serviceUrl:
+ defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-hystrix/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java b/spring-cloud/spring-cloud-hystrix/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java
new file mode 100644
index 0000000..b3e2d73
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java
@@ -0,0 +1,17 @@
+package com.heibaiying.eureka;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class EurekaApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/pom.xml b/spring-cloud/spring-cloud-hystrix/pom.xml
new file mode 100644
index 0000000..6889905
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/pom.xml
@@ -0,0 +1,65 @@
+
+
+ 4.0.0
+ pom
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.2.RELEASE
+
+
+
+ com.heibaiying.hystrix
+ spring-cloud-hystrx
+ 0.0.1-SNAPSHOT
+ spring-cloud-hystrix
+ feign project for Spring Boot
+
+
+ eureka
+ common
+ consumer
+ producer
+ turbine
+
+
+
+ 1.8
+ Finchley.SR2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/producer/pom.xml b/spring-cloud/spring-cloud-hystrix/producer/pom.xml
new file mode 100644
index 0000000..a02e3d3
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/producer/pom.xml
@@ -0,0 +1,43 @@
+
+
+ 4.0.0
+
+
+ com.heibaiying.hystrix
+ spring-cloud-hystrx
+ 0.0.1-SNAPSHOT
+
+
+ producer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+
+ com.heibaiying.hystrix
+ common
+ 0.0.1-SNAPSHOT
+ compile
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java b/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java
new file mode 100644
index 0000000..cb8e8fc
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java
@@ -0,0 +1,16 @@
+package com.heibaiying.producer;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+public class ProducerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ProducerApplication.class, args);
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java b/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java
new file mode 100644
index 0000000..c625b5c
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java
@@ -0,0 +1,34 @@
+package com.heibaiying.producer.controller;
+
+
+import com.heibaiying.common.api.IProductService;
+import com.heibaiying.common.bean.Product;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ */
+@RestController
+public class ProducerController {
+
+ @Autowired
+ private IProductService productService;
+
+ @GetMapping("products")
+ public List productList() {
+ return productService.queryAllProducts();
+ }
+
+ @GetMapping("product/{id}")
+ public Product productDetail(@PathVariable int id) {
+ return productService.queryProductById(id);
+ }
+
+ @PostMapping("product")
+ public void save(@RequestBody Product product) {
+ productService.saveProduct(product);
+ }
+}
diff --git a/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/service/ProductService.java b/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/service/ProductService.java
new file mode 100644
index 0000000..f55bfc9
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/producer/src/main/java/com/heibaiying/producer/service/ProductService.java
@@ -0,0 +1,56 @@
+package com.heibaiying.producer.service;
+
+import com.heibaiying.common.api.IProductService;
+import com.heibaiying.common.bean.Product;
+import org.springframework.boot.web.context.WebServerInitializedEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * @author : heibaiying
+ * @description : 产品提供接口实现类
+ */
+@Service
+public class ProductService implements IProductService, ApplicationListener {
+
+ private static List productList = new ArrayList<>();
+
+ public Product queryProductById(int id) {
+ for (Product product : productList) {
+ if (product.getId() == id) {
+ return product;
+ }
+ }
+ return null;
+ }
+
+
+ public List queryAllProducts() {
+ // hystrix 默认超时是2秒
+ int i = new Random().nextInt(2500);
+ try {
+ Thread.sleep(i);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ return productList;
+ }
+
+ @Override
+ public void saveProduct(Product product) {
+ productList.add(product);
+ }
+
+ @Override
+ public void onApplicationEvent(WebServerInitializedEvent event) {
+ int port = event.getWebServer().getPort();
+ for (long i = 0; i < 20; i++) {
+ productList.add(new Product(i, port + "产品" + i, i / 2 == 0, new Date(), 66.66f * i));
+ }
+ }
+}
diff --git a/spring-cloud/spring-cloud-hystrix/producer/src/main/resources/application.yml b/spring-cloud/spring-cloud-hystrix/producer/src/main/resources/application.yml
new file mode 100644
index 0000000..86c3b51
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/producer/src/main/resources/application.yml
@@ -0,0 +1,11 @@
+server:
+ port: 8020
+# 指定服务命名
+spring:
+ application:
+ name: producer
+# 指定注册中心地址
+eureka:
+ client:
+ serviceUrl:
+ defaultZone: http://localhost:8010/eureka/
diff --git a/spring-cloud/spring-cloud-hystrix/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java b/spring-cloud/spring-cloud-hystrix/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java
new file mode 100644
index 0000000..54cac2d
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java
@@ -0,0 +1,17 @@
+package com.heibaiying.producer;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class ProducerApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/turbine/pom.xml b/spring-cloud/spring-cloud-hystrix/turbine/pom.xml
new file mode 100644
index 0000000..52dd7cb
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/turbine/pom.xml
@@ -0,0 +1,47 @@
+
+
+ 4.0.0
+
+
+ com.heibaiying.hystrix
+ spring-cloud-hystrx
+ 0.0.1-SNAPSHOT
+
+
+ turbine
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix-dashboard
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-turbine
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/turbine/src/main/java/com/heibaiying/turbine/TurbineApplication.java b/spring-cloud/spring-cloud-hystrix/turbine/src/main/java/com/heibaiying/turbine/TurbineApplication.java
new file mode 100644
index 0000000..2b9a607
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/turbine/src/main/java/com/heibaiying/turbine/TurbineApplication.java
@@ -0,0 +1,36 @@
+package com.heibaiying.turbine;
+
+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.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.netflix.hystrix.EnableHystrix;
+import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
+import org.springframework.cloud.netflix.turbine.EnableTurbine;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableHystrix
+@EnableHystrixDashboard
+@EnableTurbine
+public class TurbineApplication {
+
+
+ @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;
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(TurbineApplication.class, args);
+ }
+
+}
+
diff --git a/spring-cloud/spring-cloud-hystrix/turbine/src/main/resources/application.yml b/spring-cloud/spring-cloud-hystrix/turbine/src/main/resources/application.yml
new file mode 100644
index 0000000..c6bb80d
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/turbine/src/main/resources/application.yml
@@ -0,0 +1,21 @@
+server:
+ port: 8090
+# 指定服务命名
+spring:
+ application:
+ name: turbine
+# 指定注册中心地址
+eureka:
+ client:
+ serviceUrl:
+ defaultZone: http://localhost:8010/eureka/
+# 指定聚合的项目
+turbine:
+ aggregator:
+ cluster-config: default
+ app-config: consumer
+ clusterNameExpression: new String("default")
+ instanceUrlSuffix:
+ default: actuator/hystrix.stream
+
+
diff --git a/spring-cloud/spring-cloud-hystrix/turbine/src/test/java/com/heibaiying/turbine/TurbineApplicationTests.java b/spring-cloud/spring-cloud-hystrix/turbine/src/test/java/com/heibaiying/turbine/TurbineApplicationTests.java
new file mode 100644
index 0000000..618d99a
--- /dev/null
+++ b/spring-cloud/spring-cloud-hystrix/turbine/src/test/java/com/heibaiying/turbine/TurbineApplicationTests.java
@@ -0,0 +1,17 @@
+package com.heibaiying.turbine;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class TurbineApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
+