From 2c862b51249242749d2be936579376d8c5253cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Wed, 16 Jan 2019 17:27:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Espring=20cloud=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pictures/zuul-broker.png | Bin 0 -> 31338 bytes pictures/zuul-consumer-8030.png | Bin 0 -> 34778 bytes pictures/zuul-consumer-8040.png | Bin 0 -> 33896 bytes pictures/zuul-consumer.png | Bin 0 -> 34930 bytes pictures/zuul-producer.png | Bin 0 -> 19328 bytes .../spring-cloud-feign/eureka/pom.xml | 4 +- .../producer/service/impl/ProductService.java | 4 +- spring-cloud/spring-cloud-zuul/README.md | 11 +++ spring-cloud/spring-cloud-zuul/common/pom.xml | 22 +++++ .../heibaiying/common/CommonApplication.java | 14 +++ .../com/heibaiying/common/bean/Product.java | 33 +++++++ .../heibaiying/common/feign/ProductFeign.java | 27 ++++++ .../common/CommonApplicationTests.java | 17 ++++ .../spring-cloud-zuul/consumer/pom.xml | 50 +++++++++++ .../consumer/ConsumerApplication.java | 18 ++++ .../consumer/config/FeignConfig.java | 20 +++++ .../consumer/controller/SellController.java | 48 +++++++++++ .../consumer/feign/CProductFeign.java | 15 ++++ .../feign/impl/CProductFeignImpl.java | 31 +++++++ .../src/main/resources/application.yml | 15 ++++ .../src/main/resources/templates/product.ftl | 15 ++++ .../src/main/resources/templates/products.ftl | 24 ++++++ .../consumer/ConsumerApplicationTests.java | 17 ++++ spring-cloud/spring-cloud-zuul/eureka/pom.xml | 31 +++++++ .../heibaiying/eureka/EurekaApplication.java | 16 ++++ .../eureka/src/main/resources/application.yml | 12 +++ .../eureka/EurekaApplicationTests.java | 17 ++++ spring-cloud/spring-cloud-zuul/pom.xml | 64 ++++++++++++++ .../spring-cloud-zuul/producer/pom.xml | 43 ++++++++++ .../producer/ProducerApplication.java | 16 ++++ .../controller/ProducerController.java | 35 ++++++++ .../producer/service/IProductService.java | 13 +++ .../producer/service/impl/ProductService.java | 44 ++++++++++ .../src/main/resources/application.yml | 12 +++ .../producer/ProducerApplicationTests.java | 17 ++++ spring-cloud/spring-cloud-zuul/zuul/pom.xml | 69 +++++++++++++++ .../com/heibaiying/zuul/ZuulApplication.java | 18 ++++ .../config/CustomZuulFallbackProvider.java | 81 ++++++++++++++++++ .../zuul/controller/LoginController.java | 26 ++++++ .../zuul/filter/CustomZuulFilter.java | 71 +++++++++++++++ .../zuul/src/main/resources/application.yml | 22 +++++ .../src/main/resources/templates/index.ftl | 12 +++ .../heibaiying/zuul/ZuulApplicationTests.java | 17 ++++ 43 files changed, 1017 insertions(+), 4 deletions(-) create mode 100644 pictures/zuul-broker.png create mode 100644 pictures/zuul-consumer-8030.png create mode 100644 pictures/zuul-consumer-8040.png create mode 100644 pictures/zuul-consumer.png create mode 100644 pictures/zuul-producer.png create mode 100644 spring-cloud/spring-cloud-zuul/README.md create mode 100644 spring-cloud/spring-cloud-zuul/common/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/CommonApplication.java create mode 100644 spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/bean/Product.java create mode 100644 spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java create mode 100644 spring-cloud/spring-cloud-zuul/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java create mode 100644 spring-cloud/spring-cloud-zuul/consumer/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/config/FeignConfig.java create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/impl/CProductFeignImpl.java create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/resources/templates/product.ftl create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/main/resources/templates/products.ftl create mode 100644 spring-cloud/spring-cloud-zuul/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java create mode 100644 spring-cloud/spring-cloud-zuul/eureka/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java create mode 100644 spring-cloud/spring-cloud-zuul/eureka/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-zuul/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java create mode 100644 spring-cloud/spring-cloud-zuul/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul/producer/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java create mode 100644 spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java create mode 100644 spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/service/IProductService.java create mode 100644 spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java create mode 100644 spring-cloud/spring-cloud-zuul/producer/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-zuul/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java create mode 100644 spring-cloud/spring-cloud-zuul/zuul/pom.xml create mode 100644 spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/ZuulApplication.java create mode 100644 spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/config/CustomZuulFallbackProvider.java create mode 100644 spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/controller/LoginController.java create mode 100644 spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/filter/CustomZuulFilter.java create mode 100644 spring-cloud/spring-cloud-zuul/zuul/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-zuul/zuul/src/main/resources/templates/index.ftl create mode 100644 spring-cloud/spring-cloud-zuul/zuul/src/test/java/com/heibaiying/zuul/ZuulApplicationTests.java diff --git a/pictures/zuul-broker.png b/pictures/zuul-broker.png new file mode 100644 index 0000000000000000000000000000000000000000..d75a91f22b4017c0aed0fa89c0cf70fbe0719a6f GIT binary patch literal 31338 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 bKO&yHyV|?mbg_z%*{>|GA@}LF`HTMrTm%N{ literal 0 HcmV?d00001 diff --git a/pictures/zuul-consumer-8030.png b/pictures/zuul-consumer-8030.png new file mode 100644 index 0000000000000000000000000000000000000000..d28a32552a9a0eb77910de02949cf1380172176e GIT binary patch literal 34778 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 literal 0 HcmV?d00001 diff --git a/spring-cloud/spring-cloud-feign/eureka/pom.xml b/spring-cloud/spring-cloud-feign/eureka/pom.xml index 05f297d..1023ab4 100644 --- a/spring-cloud/spring-cloud-feign/eureka/pom.xml +++ b/spring-cloud/spring-cloud-feign/eureka/pom.xml @@ -4,8 +4,8 @@ 4.0.0 - com.heibaiying - spring-cloud-ribbon + com.heibaiying.feign + spring-cloud-feign 0.0.1-SNAPSHOT diff --git a/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java index 1cb959b..35ff1cf 100644 --- a/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java +++ b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java @@ -27,13 +27,13 @@ public class ProductService implements IProductService, ApplicationListener queryAllProducts() { - // 用于测试 hystrix 超时熔断 + /*用于测试 hystrix 超时熔断 try { int i = new Random().nextInt(2500); Thread.sleep(i); } catch (InterruptedException e) { e.printStackTrace(); - } + }*/ return productList; } diff --git a/spring-cloud/spring-cloud-zuul/README.md b/spring-cloud/spring-cloud-zuul/README.md new file mode 100644 index 0000000..ae21953 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/README.md @@ -0,0 +1,11 @@ +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +The bean 'counterFactory', defined in class path resource [org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration$ZuulCounterFactoryConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration$ZuulMetricsConfiguration.class] and overriding is disabled. + +Action: + +Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul/common/pom.xml b/spring-cloud/spring-cloud-zuul/common/pom.xml new file mode 100644 index 0000000..c990214 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/common/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + + com.heibaiying.zuul + spring-cloud-zuul + 0.0.1-SNAPSHOT + + + common + + + + org.springframework.boot + spring-boot-starter-web + + + + + diff --git a/spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/CommonApplication.java b/spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/CommonApplication.java new file mode 100644 index 0000000..3675fb8 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/common/src/main/java/com/heibaiying/common/bean/Product.java b/spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/bean/Product.java new file mode 100644 index 0000000..75c3f5b --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java b/spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java new file mode 100644 index 0000000..ddcb2e3 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java @@ -0,0 +1,27 @@ +package com.heibaiying.common.feign; + +import com.heibaiying.common.bean.Product; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author : heibaiying + * @description : 声明式接口调用 + */ +public interface ProductFeign { + + @GetMapping("products") + List productList(); + + /** + * 这是需要强调的是使用feign时候@PathVariable一定要用value指明参数, + * 不然会抛出.IllegalStateException: PathVariable annotation was empty on param 异常 + */ + @GetMapping("product/{id}") + Product productDetail(@PathVariable(value = "id") int id); + + + @PostMapping("product") + void save(@RequestBody Product product); +} diff --git a/spring-cloud/spring-cloud-zuul/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java b/spring-cloud/spring-cloud-zuul/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java new file mode 100644 index 0000000..b02d448 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/consumer/pom.xml b/spring-cloud/spring-cloud-zuul/consumer/pom.xml new file mode 100644 index 0000000..e5cc1aa --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + + com.heibaiying.zuul + spring-cloud-zuul + 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-openfeign + + + + com.heibaiying.zuul + common + 0.0.1-SNAPSHOT + compile + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java new file mode 100644 index 0000000..8116bec --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java @@ -0,0 +1,18 @@ +package com.heibaiying.consumer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication +@EnableDiscoveryClient +@EnableFeignClients +public class ConsumerApplication { + + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/config/FeignConfig.java b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/config/FeignConfig.java new file mode 100644 index 0000000..e0ba1cc --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/config/FeignConfig.java @@ -0,0 +1,20 @@ +package com.heibaiying.consumer.config; + +import feign.Retryer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import static java.util.concurrent.TimeUnit.SECONDS; + +/** + * @author : heibaiying + * @description : feign 配置 + */ +@Configuration +public class FeignConfig { + + @Bean + public Retryer retryer(){ + //重试间隔为 100ms,最大重试时间为 1s, 重试次数为 5 次 + return new Retryer.Default(100,SECONDS.toMillis(1),5); + } +} diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java new file mode 100644 index 0000000..88cf933 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java @@ -0,0 +1,48 @@ +package com.heibaiying.consumer.controller; + + +import com.heibaiying.common.bean.Product; +import com.heibaiying.consumer.feign.CProductFeign; +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; +import java.util.stream.Collectors; + +/** + * @author : heibaiying + */ +@Controller +@RequestMapping("sell") +public class SellController { + + @Autowired + private CProductFeign cproductFeign; + + @GetMapping("products") + public String productList(Model model) { + List products = cproductFeign.productList(); + model.addAttribute("products", products); + return "products"; + } + + + @GetMapping("product/{id}") + public String productDetail(@PathVariable int id, Model model) { + Product product = cproductFeign.productDetail(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); + cproductFeign.save(product); + return "redirect:products"; + } +} diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java new file mode 100644 index 0000000..9dcbff5 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java @@ -0,0 +1,15 @@ +package com.heibaiying.consumer.feign; + +import com.heibaiying.common.feign.ProductFeign; +import com.heibaiying.consumer.config.FeignConfig; +import com.heibaiying.consumer.feign.impl.CProductFeignImpl; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * @author : heibaiying + * @description : 声明式接口调用 + */ +@FeignClient(value = "producer",configuration = FeignConfig.class,fallback = CProductFeignImpl.class) +public interface CProductFeign extends ProductFeign { + +} diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/impl/CProductFeignImpl.java b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/impl/CProductFeignImpl.java new file mode 100644 index 0000000..8196a8e --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/src/main/java/com/heibaiying/consumer/feign/impl/CProductFeignImpl.java @@ -0,0 +1,31 @@ +package com.heibaiying.consumer.feign.impl; + +import com.heibaiying.common.bean.Product; +import com.heibaiying.consumer.feign.CProductFeign; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : heibaiying + * @description : 定义发生错误时候的熔断处理。除了继承自CProductFeign,还需要用@Component声明为spring的组件 + */ +@Component +public class CProductFeignImpl implements CProductFeign { + + @Override + public List productList() { + return new ArrayList<>(); + } + + @Override + public Product productDetail(int id) { + return null; + } + + @Override + public void save(Product product) { + + } +} diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul/consumer/src/main/resources/application.yml new file mode 100644 index 0000000..784d0d6 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/src/main/resources/application.yml @@ -0,0 +1,15 @@ +server: + port: 8080 +# 指定服务命名 +spring: + application: + name: consumer +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ +feign: + hystrix: + # 如果为true,则OpenFign客户端将使用Hystrix断路器进行封装 默认为false + enabled: true diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/main/resources/templates/product.ftl b/spring-cloud/spring-cloud-zuul/consumer/src/main/resources/templates/product.ftl new file mode 100644 index 0000000..729f516 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/consumer/src/main/resources/templates/products.ftl b/spring-cloud/spring-cloud-zuul/consumer/src/main/resources/templates/products.ftl new file mode 100644 index 0000000..c83dc5d --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/consumer/src/main/resources/templates/products.ftl @@ -0,0 +1,24 @@ + + + + 产品列表 + + +

产品列表:点击查看详情

+
+ + +
+
+ + diff --git a/spring-cloud/spring-cloud-zuul/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java b/spring-cloud/spring-cloud-zuul/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java new file mode 100644 index 0000000..82f5399 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/eureka/pom.xml b/spring-cloud/spring-cloud-zuul/eureka/pom.xml new file mode 100644 index 0000000..8b23599 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/eureka/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + com.heibaiying.zuul + spring-cloud-zuul + 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-zuul/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java b/spring-cloud/spring-cloud-zuul/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java new file mode 100644 index 0000000..bd54938 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/eureka/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul/eureka/src/main/resources/application.yml new file mode 100644 index 0000000..817356d --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java b/spring-cloud/spring-cloud-zuul/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java new file mode 100644 index 0000000..b3e2d73 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/pom.xml b/spring-cloud/spring-cloud-zuul/pom.xml new file mode 100644 index 0000000..c05b16a --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + pom + + + org.springframework.boot + spring-boot-starter-parent + 2.1.2.RELEASE + + + + com.heibaiying.zuul + spring-cloud-zuul + 0.0.1-SNAPSHOT + spring-cloud-zuul + zuul project for Spring Boot + + + eureka + common + consumer + producer + + + + 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-zuul/producer/pom.xml b/spring-cloud/spring-cloud-zuul/producer/pom.xml new file mode 100644 index 0000000..d4f84a9 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/producer/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + + com.heibaiying.zuul + spring-cloud-zuul + 0.0.1-SNAPSHOT + + + producer + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + com.heibaiying.zuul + common + 0.0.1-SNAPSHOT + compile + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java b/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java new file mode 100644 index 0000000..cb8e8fc --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java b/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java new file mode 100644 index 0000000..7827491 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java @@ -0,0 +1,35 @@ +package com.heibaiying.producer.controller; + + +import com.heibaiying.common.bean.Product; +import com.heibaiying.common.feign.ProductFeign; +import com.heibaiying.producer.service.IProductService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author : heibaiying + */ +@RestController +public class ProducerController implements ProductFeign { + + @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-zuul/producer/src/main/java/com/heibaiying/producer/service/IProductService.java b/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/service/IProductService.java new file mode 100644 index 0000000..0a55013 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/service/IProductService.java @@ -0,0 +1,13 @@ +package com.heibaiying.producer.service; + +import com.heibaiying.common.bean.Product; + +import java.util.List; +public interface IProductService { + + Product queryProductById(int id) ; + + List queryAllProducts(); + + void saveProduct(Product product); +} diff --git a/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java b/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java new file mode 100644 index 0000000..caef1cf --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java @@ -0,0 +1,44 @@ +package com.heibaiying.producer.service.impl; + +import com.heibaiying.common.bean.Product; +import com.heibaiying.producer.service.IProductService; +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.stream.Collectors; + +/** + * @author : heibaiying + * @description : 产品提供接口实现类 + */ +@Service +public class ProductService implements IProductService, ApplicationListener { + + private static List productList = new ArrayList<>(); + + public Product queryProductById(int id) { + return productList.stream().filter(p->p.getId()==id).collect(Collectors.toList()).get(0); + } + + + public List queryAllProducts() { + 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)); + } + } +} \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul/producer/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul/producer/src/main/resources/application.yml new file mode 100644 index 0000000..5ca7302 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/producer/src/main/resources/application.yml @@ -0,0 +1,12 @@ +server: + port: 8020 +# 指定服务命名 +spring: + application: + name: producer +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ + diff --git a/spring-cloud/spring-cloud-zuul/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java b/spring-cloud/spring-cloud-zuul/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java new file mode 100644 index 0000000..54cac2d --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/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-zuul/zuul/pom.xml b/spring-cloud/spring-cloud-zuul/zuul/pom.xml new file mode 100644 index 0000000..b56467b --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + + + org.springframework.boot + spring-boot-starter-parent + 2.0.8.RELEASE + + + + zuul + + + 1.8 + Finchley.SR2 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-freemarker + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + org.springframework.cloud + spring-cloud-starter-netflix-zuul + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + diff --git a/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/ZuulApplication.java b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/ZuulApplication.java new file mode 100644 index 0000000..ba19b9d --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/ZuulApplication.java @@ -0,0 +1,18 @@ +package com.heibaiying.zuul; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.netflix.zuul.EnableZuulProxy; + +@SpringBootApplication +@EnableZuulProxy +@EnableDiscoveryClient +public class ZuulApplication { + + public static void main(String[] args) { + SpringApplication.run(ZuulApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/config/CustomZuulFallbackProvider.java b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/config/CustomZuulFallbackProvider.java new file mode 100644 index 0000000..0955398 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/config/CustomZuulFallbackProvider.java @@ -0,0 +1,81 @@ +package com.heibaiying.zuul.config; + +import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * @author : heibaiying + * @description : zuul 的熔断器 + */ +@Component +public class CustomZuulFallbackProvider implements FallbackProvider { + + /* + * 定义熔断将用于哪些路由的服务 + */ + @Override + public String getRoute() { + return "consumer"; + } + + @Override + public ClientHttpResponse fallbackResponse(String route, Throwable cause) { + return new ClientHttpResponse() { + + /** + * 返回响应的HTTP状态代码 + */ + @Override + public HttpStatus getStatusCode() throws IOException { + return HttpStatus.SERVICE_UNAVAILABLE; + } + + /** + * 返回HTTP状态代码 + */ + @Override + public int getRawStatusCode() throws IOException { + return HttpStatus.SERVICE_UNAVAILABLE.value(); + } + + /** + * 返回响应的HTTP状态文本 + */ + @Override + public String getStatusText() throws IOException { + return HttpStatus.SERVICE_UNAVAILABLE.getReasonPhrase(); + } + + @Override + public void close() { + + } + + /** + * 将消息正文作为输入流返回 + */ + @Override + public InputStream getBody() throws IOException { + return new ByteArrayInputStream("商城崩溃了,请稍后重试!".getBytes()); + } + + /** + * 将消息正文作为输入流返回 + */ + @Override + public HttpHeaders getHeaders() { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); + return httpHeaders; + } + }; + } +} diff --git a/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/controller/LoginController.java b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/controller/LoginController.java new file mode 100644 index 0000000..0c5d75d --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/controller/LoginController.java @@ -0,0 +1,26 @@ +package com.heibaiying.zuul.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpSession; +import java.util.Random; + +/** + * @author : heibaiying + * @description : 登录 + */ +@Controller +public class LoginController { + + @RequestMapping("index") + public String login(){ + return "index"; + } + + @RequestMapping("login") + public String login(String username,HttpSession session){ + session.setAttribute("code",username+String.valueOf(new Random().nextInt(10*1000))); + return "redirect:/consumer/sell/products"; + } +} diff --git a/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/filter/CustomZuulFilter.java b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/filter/CustomZuulFilter.java new file mode 100644 index 0000000..70c9036 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/src/main/java/com/heibaiying/zuul/filter/CustomZuulFilter.java @@ -0,0 +1,71 @@ +package com.heibaiying.zuul.filter; + +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; +import com.netflix.zuul.exception.ZuulException; +import org.omg.CORBA.Request; +import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author : heibaiying + * @description : 自定义filter过滤器 + */ + +@Component +public class CustomZuulFilter extends ZuulFilter { + + /** + * 返回过滤器的类型 + */ + @Override + public String filterType() { + return FilterConstants.PRE_TYPE; + } + + /** + * 返回过滤器的优先级顺序 + */ + @Override + public int filterOrder() { + return 0; + } + + /** + * 从此方法返回“true”意味着应该调用下面的 run()方法 + */ + @Override + public boolean shouldFilter() { + return true; + } + + /** + * ZuulFilter的核心校验方法 + */ + @Override + public Object run() throws ZuulException { + RequestContext currentContext = RequestContext.getCurrentContext(); + HttpServletRequest request = currentContext.getRequest(); + String code = (String)request.getSession().getAttribute("code"); + if (StringUtils.isEmpty(code)){ + // 设置值为false 不将请求转发到对应的服务上 + currentContext.setSendZuulResponse(false); + // 设置返回的状态码 + currentContext.setResponseStatusCode(HttpStatus.NON_AUTHORITATIVE_INFORMATION.value()); + HttpServletResponse response = currentContext.getResponse(); + try { + // 跳转到登录页面 + response.sendRedirect("/index"); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/spring-cloud/spring-cloud-zuul/zuul/src/main/resources/application.yml b/spring-cloud/spring-cloud-zuul/zuul/src/main/resources/application.yml new file mode 100644 index 0000000..22fdfaa --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/src/main/resources/application.yml @@ -0,0 +1,22 @@ +server: + port: 8090 +# 指定服务命名 +spring: + application: + name: zuul +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ +# 网关的路由 +zuul: + routes: + xxxx: #这个地方的值是可以任意的字符串 + path: /producer/** + serviceId: producer + consumer: + path: /consumer/** + serviceId: consumer + # 指定前缀 + # prefix: /v1 diff --git a/spring-cloud/spring-cloud-zuul/zuul/src/main/resources/templates/index.ftl b/spring-cloud/spring-cloud-zuul/zuul/src/main/resources/templates/index.ftl new file mode 100644 index 0000000..a6e2308 --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/src/main/resources/templates/index.ftl @@ -0,0 +1,12 @@ + + + + Title + + +
+ + +
+ + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-zuul/zuul/src/test/java/com/heibaiying/zuul/ZuulApplicationTests.java b/spring-cloud/spring-cloud-zuul/zuul/src/test/java/com/heibaiying/zuul/ZuulApplicationTests.java new file mode 100644 index 0000000..488c93a --- /dev/null +++ b/spring-cloud/spring-cloud-zuul/zuul/src/test/java/com/heibaiying/zuul/ZuulApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.zuul; + +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 ZuulApplicationTests { + + @Test + public void contextLoads() { + } + +} +