diff --git a/springcloud/第一篇所用代码/confsvr/pom.xml b/springcloud/spring-cloud-config配置中心/confsvr/pom.xml similarity index 100% rename from springcloud/第一篇所用代码/confsvr/pom.xml rename to springcloud/spring-cloud-config配置中心/confsvr/pom.xml diff --git a/springcloud/第一篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java b/springcloud/spring-cloud-config配置中心/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java similarity index 100% rename from springcloud/第一篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java rename to springcloud/spring-cloud-config配置中心/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java diff --git a/springcloud/第一篇所用代码/confsvr/src/main/resources/application.yml b/springcloud/spring-cloud-config配置中心/confsvr/src/main/resources/application.yml similarity index 100% rename from springcloud/第一篇所用代码/confsvr/src/main/resources/application.yml rename to springcloud/spring-cloud-config配置中心/confsvr/src/main/resources/application.yml diff --git a/springcloud/第一篇所用代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java b/springcloud/spring-cloud-config配置中心/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java similarity index 100% rename from springcloud/第一篇所用代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java rename to springcloud/spring-cloud-config配置中心/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java diff --git a/springcloud/第一篇所用代码/licensingservice/pom.xml b/springcloud/spring-cloud-config配置中心/licensingservice/pom.xml similarity index 100% rename from springcloud/第一篇所用代码/licensingservice/pom.xml rename to springcloud/spring-cloud-config配置中心/licensingservice/pom.xml diff --git a/springcloud/第一篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java b/springcloud/spring-cloud-config配置中心/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java similarity index 100% rename from springcloud/第一篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java rename to springcloud/spring-cloud-config配置中心/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java diff --git a/springcloud/第一篇所用代码/licensingservice/src/main/resources/application.yml b/springcloud/spring-cloud-config配置中心/licensingservice/src/main/resources/application.yml similarity index 100% rename from springcloud/第一篇所用代码/licensingservice/src/main/resources/application.yml rename to springcloud/spring-cloud-config配置中心/licensingservice/src/main/resources/application.yml diff --git a/springcloud/第一篇所用代码/licensingservice/src/main/resources/bootstrap.yml b/springcloud/spring-cloud-config配置中心/licensingservice/src/main/resources/bootstrap.yml similarity index 100% rename from springcloud/第一篇所用代码/licensingservice/src/main/resources/bootstrap.yml rename to springcloud/spring-cloud-config配置中心/licensingservice/src/main/resources/bootstrap.yml diff --git a/springcloud/第一篇所用代码/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java b/springcloud/spring-cloud-config配置中心/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java similarity index 100% rename from springcloud/第一篇所用代码/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java rename to springcloud/spring-cloud-config配置中心/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java diff --git a/springcloud/第三篇所用代码/confsvr/pom.xml b/springcloud/spring-cloud弹性客户端/confsvr/pom.xml similarity index 100% rename from springcloud/第三篇所用代码/confsvr/pom.xml rename to springcloud/spring-cloud弹性客户端/confsvr/pom.xml diff --git a/springcloud/第三篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java b/springcloud/spring-cloud弹性客户端/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java similarity index 100% rename from springcloud/第三篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java rename to springcloud/spring-cloud弹性客户端/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java diff --git a/springcloud/第三篇所用代码/confsvr/src/main/resources/application.yml b/springcloud/spring-cloud弹性客户端/confsvr/src/main/resources/application.yml similarity index 100% rename from springcloud/第三篇所用代码/confsvr/src/main/resources/application.yml rename to springcloud/spring-cloud弹性客户端/confsvr/src/main/resources/application.yml diff --git a/springcloud/第三篇所用代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java b/springcloud/spring-cloud弹性客户端/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java similarity index 100% rename from springcloud/第三篇所用代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java rename to springcloud/spring-cloud弹性客户端/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java diff --git a/springcloud/第三篇所用代码/eurekasvr/pom.xml b/springcloud/spring-cloud弹性客户端/eurekasvr/pom.xml similarity index 100% rename from springcloud/第三篇所用代码/eurekasvr/pom.xml rename to springcloud/spring-cloud弹性客户端/eurekasvr/pom.xml diff --git a/springcloud/第三篇所用代码/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java b/springcloud/spring-cloud弹性客户端/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java similarity index 100% rename from springcloud/第三篇所用代码/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java rename to springcloud/spring-cloud弹性客户端/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java diff --git a/springcloud/第三篇所用代码/eurekasvr/src/main/resources/application.yml b/springcloud/spring-cloud弹性客户端/eurekasvr/src/main/resources/application.yml similarity index 100% rename from springcloud/第三篇所用代码/eurekasvr/src/main/resources/application.yml rename to springcloud/spring-cloud弹性客户端/eurekasvr/src/main/resources/application.yml diff --git a/springcloud/第三篇所用代码/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java b/springcloud/spring-cloud弹性客户端/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java similarity index 100% rename from springcloud/第三篇所用代码/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java rename to springcloud/spring-cloud弹性客户端/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java diff --git a/springcloud/第三篇所用代码/licensingservice/pom.xml b/springcloud/spring-cloud弹性客户端/licensingservice/pom.xml similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/pom.xml rename to springcloud/spring-cloud弹性客户端/licensingservice/pom.xml diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/resources/application.yml b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/resources/application.yml similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/resources/application.yml rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/resources/application.yml diff --git a/springcloud/第三篇所用代码/licensingservice/src/main/resources/bootstrap.yml b/springcloud/spring-cloud弹性客户端/licensingservice/src/main/resources/bootstrap.yml similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/main/resources/bootstrap.yml rename to springcloud/spring-cloud弹性客户端/licensingservice/src/main/resources/bootstrap.yml diff --git a/springcloud/第三篇所用代码/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java b/springcloud/spring-cloud弹性客户端/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java similarity index 100% rename from springcloud/第三篇所用代码/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java rename to springcloud/spring-cloud弹性客户端/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java diff --git a/springcloud/第三篇所用代码/organizationservice/pom.xml b/springcloud/spring-cloud弹性客户端/organizationservice/pom.xml similarity index 100% rename from springcloud/第三篇所用代码/organizationservice/pom.xml rename to springcloud/spring-cloud弹性客户端/organizationservice/pom.xml diff --git a/springcloud/第三篇所用代码/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java b/springcloud/spring-cloud弹性客户端/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java similarity index 100% rename from springcloud/第三篇所用代码/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java rename to springcloud/spring-cloud弹性客户端/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java diff --git a/springcloud/第三篇所用代码/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java b/springcloud/spring-cloud弹性客户端/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java similarity index 100% rename from springcloud/第三篇所用代码/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java rename to springcloud/spring-cloud弹性客户端/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java diff --git a/springcloud/第三篇所用代码/organizationservice/src/main/resources/application.properties b/springcloud/spring-cloud弹性客户端/organizationservice/src/main/resources/application.properties similarity index 100% rename from springcloud/第三篇所用代码/organizationservice/src/main/resources/application.properties rename to springcloud/spring-cloud弹性客户端/organizationservice/src/main/resources/application.properties diff --git a/springcloud/第三篇所用代码/organizationservice/src/main/resources/bootstrap.yml b/springcloud/spring-cloud弹性客户端/organizationservice/src/main/resources/bootstrap.yml similarity index 100% rename from springcloud/第三篇所用代码/organizationservice/src/main/resources/bootstrap.yml rename to springcloud/spring-cloud弹性客户端/organizationservice/src/main/resources/bootstrap.yml diff --git a/springcloud/第三篇所用代码/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java b/springcloud/spring-cloud弹性客户端/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java similarity index 100% rename from springcloud/第三篇所用代码/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java rename to springcloud/spring-cloud弹性客户端/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java diff --git a/springcloud/第二篇代码/confsvr/pom.xml b/springcloud/spring-cloud服务发现/confsvr/pom.xml similarity index 100% rename from springcloud/第二篇代码/confsvr/pom.xml rename to springcloud/spring-cloud服务发现/confsvr/pom.xml diff --git a/springcloud/第二篇代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java b/springcloud/spring-cloud服务发现/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java similarity index 100% rename from springcloud/第二篇代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java rename to springcloud/spring-cloud服务发现/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java diff --git a/springcloud/第二篇代码/confsvr/src/main/resources/application.yml b/springcloud/spring-cloud服务发现/confsvr/src/main/resources/application.yml similarity index 100% rename from springcloud/第二篇代码/confsvr/src/main/resources/application.yml rename to springcloud/spring-cloud服务发现/confsvr/src/main/resources/application.yml diff --git a/springcloud/第二篇代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java b/springcloud/spring-cloud服务发现/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java similarity index 100% rename from springcloud/第二篇代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java rename to springcloud/spring-cloud服务发现/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java diff --git a/springcloud/第二篇代码/eurekasvr/pom.xml b/springcloud/spring-cloud服务发现/eurekasvr/pom.xml similarity index 100% rename from springcloud/第二篇代码/eurekasvr/pom.xml rename to springcloud/spring-cloud服务发现/eurekasvr/pom.xml diff --git a/springcloud/第二篇代码/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java b/springcloud/spring-cloud服务发现/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java similarity index 100% rename from springcloud/第二篇代码/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java rename to springcloud/spring-cloud服务发现/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java diff --git a/springcloud/第二篇代码/eurekasvr/src/main/resources/application.yml b/springcloud/spring-cloud服务发现/eurekasvr/src/main/resources/application.yml similarity index 100% rename from springcloud/第二篇代码/eurekasvr/src/main/resources/application.yml rename to springcloud/spring-cloud服务发现/eurekasvr/src/main/resources/application.yml diff --git a/springcloud/第二篇代码/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java b/springcloud/spring-cloud服务发现/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java similarity index 100% rename from springcloud/第二篇代码/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java rename to springcloud/spring-cloud服务发现/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java diff --git a/springcloud/第二篇代码/licensingservice/pom.xml b/springcloud/spring-cloud服务发现/licensingservice/pom.xml similarity index 100% rename from springcloud/第二篇代码/licensingservice/pom.xml rename to springcloud/spring-cloud服务发现/licensingservice/pom.xml diff --git a/springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java b/springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java rename to springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java diff --git a/springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java b/springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java rename to springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java diff --git a/springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java b/springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java rename to springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java diff --git a/springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java b/springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java rename to springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java diff --git a/springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java b/springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java rename to springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java diff --git a/springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java b/springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java rename to springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java diff --git a/springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java b/springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java rename to springcloud/spring-cloud服务发现/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java diff --git a/springcloud/第二篇代码/licensingservice/src/main/resources/application.yml b/springcloud/spring-cloud服务发现/licensingservice/src/main/resources/application.yml similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/resources/application.yml rename to springcloud/spring-cloud服务发现/licensingservice/src/main/resources/application.yml diff --git a/springcloud/第二篇代码/licensingservice/src/main/resources/bootstrap.yml b/springcloud/spring-cloud服务发现/licensingservice/src/main/resources/bootstrap.yml similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/main/resources/bootstrap.yml rename to springcloud/spring-cloud服务发现/licensingservice/src/main/resources/bootstrap.yml diff --git a/springcloud/第二篇代码/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java b/springcloud/spring-cloud服务发现/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java similarity index 100% rename from springcloud/第二篇代码/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java rename to springcloud/spring-cloud服务发现/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java diff --git a/springcloud/第二篇代码/organizationservice/pom.xml b/springcloud/spring-cloud服务发现/organizationservice/pom.xml similarity index 100% rename from springcloud/第二篇代码/organizationservice/pom.xml rename to springcloud/spring-cloud服务发现/organizationservice/pom.xml diff --git a/springcloud/第二篇代码/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java b/springcloud/spring-cloud服务发现/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java similarity index 100% rename from springcloud/第二篇代码/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java rename to springcloud/spring-cloud服务发现/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java diff --git a/springcloud/第二篇代码/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java b/springcloud/spring-cloud服务发现/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java similarity index 100% rename from springcloud/第二篇代码/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java rename to springcloud/spring-cloud服务发现/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java diff --git a/springcloud/第二篇代码/organizationservice/src/main/resources/application.properties b/springcloud/spring-cloud服务发现/organizationservice/src/main/resources/application.properties similarity index 100% rename from springcloud/第二篇代码/organizationservice/src/main/resources/application.properties rename to springcloud/spring-cloud服务发现/organizationservice/src/main/resources/application.properties diff --git a/springcloud/第二篇代码/organizationservice/src/main/resources/bootstrap.yml b/springcloud/spring-cloud服务发现/organizationservice/src/main/resources/bootstrap.yml similarity index 100% rename from springcloud/第二篇代码/organizationservice/src/main/resources/bootstrap.yml rename to springcloud/spring-cloud服务发现/organizationservice/src/main/resources/bootstrap.yml diff --git a/springcloud/第二篇代码/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java b/springcloud/spring-cloud服务发现/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java similarity index 100% rename from springcloud/第二篇代码/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java rename to springcloud/spring-cloud服务发现/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java diff --git a/springcloud/spring-cloud服务路由/confsvr/pom.xml b/springcloud/spring-cloud服务路由/confsvr/pom.xml new file mode 100644 index 0000000..5c8cec2 --- /dev/null +++ b/springcloud/spring-cloud服务路由/confsvr/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + com.fxb + demo + 0.0.1-SNAPSHOT + jar + + confsvr + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.4.RELEASE + + + + + org.springframework.cloud + spring-cloud-dependencies + Camden.SR5 + pom + import + + + + + + UTF-8 + UTF-8 + 1.8 + Camden.SR5 + + + + + org.springframework.cloud + spring-cloud-config-server + + + org.springframework.cloud + spring-cloud-starter-eureka + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/springcloud/spring-cloud服务路由/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java b/springcloud/spring-cloud服务路由/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java new file mode 100644 index 0000000..3c94900 --- /dev/null +++ b/springcloud/spring-cloud服务路由/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java @@ -0,0 +1,16 @@ +package com.fxb.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.config.server.EnableConfigServer; + +@SpringBootApplication +@EnableConfigServer +@EnableDiscoveryClient +public class ConfsvrApplication { + + public static void main(String[] args) { + SpringApplication.run(ConfsvrApplication.class, args); + } +} diff --git a/springcloud/spring-cloud服务路由/confsvr/src/main/resources/application.yml b/springcloud/spring-cloud服务路由/confsvr/src/main/resources/application.yml new file mode 100644 index 0000000..528c81c --- /dev/null +++ b/springcloud/spring-cloud服务路由/confsvr/src/main/resources/application.yml @@ -0,0 +1,29 @@ +server: + port: 8888 + +eureka: + instance: + #注册服务的IP,而不是服务器名 + prefer-ip-address: true + client: + #向eureka注册服务 + register-with-eureka: true + #拉取注册表的本地副本 + fetch-registry: true + service-url: + #Eureka服务的位置(如果有多个注册中心,使用,分隔) + defaultZone: http://localhost:8761/eureka/ + +spring: + profiles: + # 使用文件系统来存储配置信息,需要设置为native + active: native + application: + name: confsvr + cloud: + config: + server: + native: + # 使用文件来存放配置文件,为每个应用程序提供用逗号分隔的文件夹列表 + searchLocations: file:///D:/configFolder/licensingservice,file:///D:/configFolder/organizationservice + diff --git a/springcloud/spring-cloud服务路由/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java b/springcloud/spring-cloud服务路由/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java new file mode 100644 index 0000000..3096743 --- /dev/null +++ b/springcloud/spring-cloud服务路由/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java @@ -0,0 +1,16 @@ +package com.fxb.demo; + +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 ConfsvrApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/springcloud/spring-cloud服务路由/eurekasvr/pom.xml b/springcloud/spring-cloud服务路由/eurekasvr/pom.xml new file mode 100644 index 0000000..5337b2a --- /dev/null +++ b/springcloud/spring-cloud服务路由/eurekasvr/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + com.fxb + eurekasvr + 0.0.1-SNAPSHOT + jar + + eurekasvr + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.4.RELEASE + + + + + org.springframework.cloud + spring-cloud-dependencies + Camden.SR5 + pom + import + + + + + + UTF-8 + UTF-8 + 1.8 + Camden.SR5 + + + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + diff --git a/springcloud/spring-cloud服务路由/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java b/springcloud/spring-cloud服务路由/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java new file mode 100644 index 0000000..0ee3302 --- /dev/null +++ b/springcloud/spring-cloud服务路由/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java @@ -0,0 +1,14 @@ +package com.fxb.eurekasvr; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekasvrApplication { + + public static void main(String[] args) { + SpringApplication.run(EurekasvrApplication.class, args); + } +} diff --git a/springcloud/spring-cloud服务路由/eurekasvr/src/main/resources/application.yml b/springcloud/spring-cloud服务路由/eurekasvr/src/main/resources/application.yml new file mode 100644 index 0000000..12cd213 --- /dev/null +++ b/springcloud/spring-cloud服务路由/eurekasvr/src/main/resources/application.yml @@ -0,0 +1,12 @@ +server: + port: 8761 + +eureka: + client: + #不注册自己 + register-with-eureka: false + #不在本地缓存注册表信息 + fetch-registry: false + server: + #接受请求前的等待实际,开发模式下不要开启 + #wait-time-in-ms-when-sync-empty: 5 diff --git a/springcloud/spring-cloud服务路由/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java b/springcloud/spring-cloud服务路由/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java new file mode 100644 index 0000000..3d21ad6 --- /dev/null +++ b/springcloud/spring-cloud服务路由/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java @@ -0,0 +1,16 @@ +package com.fxb.eurekasvr; + +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 EurekasvrApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/pom.xml b/springcloud/spring-cloud服务路由/licensingservice/pom.xml new file mode 100644 index 0000000..1588d1a --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + com.fxb + licensingservice + 0.0.1-SNAPSHOT + jar + + licensingservice + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.4.RELEASE + + + + + org.springframework.cloud + spring-cloud-dependencies + Camden.SR5 + pom + import + + + + + + UTF-8 + UTF-8 + 1.8 + Camden.SR5 + + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.cloud + spring-cloud-config-client + + + org.springframework.cloud + spring-cloud-starter-feign + + + org.springframework.cloud + spring-cloud-starter-hystrix + + + + com.netflix.hystrix + hystrix-javanica + 1.5.9 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java new file mode 100644 index 0000000..f5c5d3b --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java @@ -0,0 +1,31 @@ +package com.fxb.licensingservice.Entity; + +import java.io.Serializable; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/11/22 19:52 + */ +public class Licensing implements Serializable { + private Organization organization; + private boolean isValid; + + public Organization getOrganization() { + return organization; + } + + public void setOrganization(Organization organization) { + this.organization = organization; + } + + public boolean isValid() { + return isValid; + } + + public void setValid(boolean valid) { + isValid = valid; + } +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java new file mode 100644 index 0000000..357bfa3 --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java @@ -0,0 +1,40 @@ +package com.fxb.licensingservice.Entity; + +import java.io.Serializable; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/11/22 19:30 + */ +public class Organization implements Serializable { + + private String id; + private String name; + + public Organization() { + } + + public Organization(String id, String name) { + this.id = id; + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java new file mode 100644 index 0000000..bb3a3f4 --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java @@ -0,0 +1,30 @@ +package com.fxb.licensingservice; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; + +@SpringBootApplication +@EnableDiscoveryClient //使用不带Ribbon功能的Spring RestTemplate,其他情况下可删除 +@EnableFeignClients //使用Feign客户端进行服务调用,其他情况下可删除 +@EnableCircuitBreaker //告诉Spring Cloud将要使用Hystrix +public class LicensingserviceApplication { + + /** + * 使用带有Ribbon 功能的Spring RestTemplate,其他情况可删除 + */ + @LoadBalanced + @Bean + public RestTemplate getRestTemplate(){ + return new RestTemplate(); + } + + public static void main(String[] args) { + SpringApplication.run(LicensingserviceApplication.class, args); + } +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java new file mode 100644 index 0000000..6e92dd9 --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java @@ -0,0 +1,32 @@ +package com.fxb.licensingservice.client; + +import com.fxb.licensingservice.Entity.Organization; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; +import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/11/23 17:24 + */ +@FeignClient(name="organizationservice",fallback = OrganizationFeignClientImpl.class)//使用FeignClient注解指定目标服务 +public interface OrganizationFeignClient { + + /** + * 获取组织信息 + * + * @param orgId 组织id + * @return Organization + */ + @HystrixCommand(commandProperties = { + @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000") + }) + @RequestMapping(method = RequestMethod.GET, value = "/organization/{orgId}", consumes = "application/json") + Organization getOrganization(@PathVariable("orgId") String orgId); +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java new file mode 100644 index 0000000..540d36b --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java @@ -0,0 +1,23 @@ +package com.fxb.licensingservice.client; + +import com.fxb.licensingservice.Entity.Organization; +import org.springframework.stereotype.Component; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/12/7 11:30 + */ +@Component +public class OrganizationFeignClientImpl implements OrganizationFeignClient{ + + @Override + public Organization getOrganization(String orgId) { + Organization organization=new Organization(); + organization.setId("0"); + organization.setName("后备模式返回的数据"); + return organization; + } +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java new file mode 100644 index 0000000..85dea2f --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java @@ -0,0 +1,56 @@ +package com.fxb.licensingservice.controller; + +import com.fxb.licensingservice.Entity.Licensing; +import com.fxb.licensingservice.client.OrganizationFeignClient; +import com.fxb.licensingservice.service.OrganizationByRibbonService; +import com.fxb.licensingservice.service.OrganizationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/11/22 19:51 + */ +@RestController +public class LicensingController { + + private OrganizationService organizationService; + private OrganizationByRibbonService ribbonService; + private OrganizationFeignClient organizationFeignClient; + + @Autowired + public LicensingController(OrganizationService organizationService, OrganizationByRibbonService ribbonService, OrganizationFeignClient feignClient) { + this.organizationService = organizationService; + this.ribbonService = ribbonService; + this.organizationFeignClient = feignClient; + } + + @GetMapping("/licensing/{orgId}") + public Licensing getLicensing(@PathVariable("orgId") String orgId) { + Licensing licensing = new Licensing(); + licensing.setValid(false); + licensing.setOrganization(organizationService.getOrganization(orgId)); + return licensing; + } + + @GetMapping("/licensingByRibbon/{orgId}") + public Licensing getLicensingByRibbon(@PathVariable("orgId") String orgId) throws Exception{ + Licensing licensing = new Licensing(); + licensing.setValid(false); + licensing.setOrganization(ribbonService.getOrganizationWithRibbon(orgId)); + return licensing; + } + + @GetMapping("/licensingByFeign/{orgId}") + public Licensing getLicensingByFeign(@PathVariable("orgId") String orgId) { + Licensing licensing = new Licensing(); + licensing.setValid(false); + licensing.setOrganization(organizationFeignClient.getOrganization(orgId)); + return licensing; + } +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java new file mode 100644 index 0000000..829d7de --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java @@ -0,0 +1,50 @@ +package com.fxb.licensingservice.service; + +import com.fxb.licensingservice.Entity.Organization; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/11/23 15:36 + */ +@Component +public class OrganizationByRibbonService { + + private RestTemplate restTemplate; + + + @Autowired + public OrganizationByRibbonService(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + @HystrixCommand(commandProperties = { + @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000") + }, fallbackMethod = "getOrganizationWithRibbonBackup", + threadPoolKey = "licenseByOrgThreadPool", + threadPoolProperties = { + @HystrixProperty(name = "coreSize", value = "30"), + @HystrixProperty(name = "maxQueueSize", value = "10") + }) + public Organization getOrganizationWithRibbon(String id) throws Exception { + ResponseEntity responseEntity = restTemplate.exchange("http://organizationservice/organization/{id}", + HttpMethod.GET, null, Organization.class, id); + return responseEntity.getBody(); + } + + public Organization getOrganizationWithRibbonBackup(String id) throws Exception { + Organization organization = new Organization(); + organization.setId("0"); + organization.setName("组织服务调用失败"); + return organization; + } +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java new file mode 100644 index 0000000..39d2327 --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationService.java @@ -0,0 +1,50 @@ +package com.fxb.licensingservice.service; + +import com.fxb.licensingservice.Entity.Organization; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.List; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/11/22 19:29 + */ +@Service +public class OrganizationService { + + private static final String SERVICE_NAME = "organizationservice"; + private DiscoveryClient discoveryClient; + + @Autowired + public OrganizationService(DiscoveryClient discoveryClient) { + this.discoveryClient = discoveryClient; + } + + /** + * 使用Spring DiscoveryClient查询 + * + * @param id + * @return + */ + public Organization getOrganization(String id) { + RestTemplate restTemplate = new RestTemplate(); + List instances = discoveryClient.getInstances(SERVICE_NAME); + if (instances.size() == 0) { + throw new RuntimeException("无可用的服务"); + } + String serviceUri = String.format("%s/organization/%s", instances.get(0).getUri().toString(), id); + ResponseEntity responseEntity = restTemplate.exchange(serviceUri, HttpMethod.GET + , null, Organization.class, id); + return responseEntity.getBody(); + } + +} diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/resources/application.yml b/springcloud/spring-cloud服务路由/licensingservice/src/main/resources/application.yml new file mode 100644 index 0000000..e69de29 diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/main/resources/bootstrap.yml b/springcloud/spring-cloud服务路由/licensingservice/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..38f0059 --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/main/resources/bootstrap.yml @@ -0,0 +1,19 @@ +spring: + application: + #指定名称,以便spring cloud config客户端知道查找哪个配置 + name: licensingservice + profiles: + #指定环境 + active: dev + cloud: + config: + enabled: true +eureka: + instance: + prefer-ip-address: true + client: + register-with-eureka: true + fetch-registry: true + service-url: + defaultZone: http://localhost:8761/eureka/ + diff --git a/springcloud/spring-cloud服务路由/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java b/springcloud/spring-cloud服务路由/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java new file mode 100644 index 0000000..d29b4bf --- /dev/null +++ b/springcloud/spring-cloud服务路由/licensingservice/src/test/java/com/fxb/licensingservice/LicensingserviceApplicationTests.java @@ -0,0 +1,16 @@ +package com.fxb.licensingservice; + +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 LicensingserviceApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/springcloud/spring-cloud服务路由/organizationservice/pom.xml b/springcloud/spring-cloud服务路由/organizationservice/pom.xml new file mode 100644 index 0000000..421deea --- /dev/null +++ b/springcloud/spring-cloud服务路由/organizationservice/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + com.fxb + organizationservice + 0.0.1-SNAPSHOT + jar + + organizationservice + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.4.RELEASE + + + + + org.springframework.cloud + spring-cloud-dependencies + Camden.SR5 + pom + import + + + + + + UTF-8 + UTF-8 + 1.8 + Camden.SR5 + + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.cloud + spring-cloud-config-client + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/springcloud/spring-cloud服务路由/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java b/springcloud/spring-cloud服务路由/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java new file mode 100644 index 0000000..8da4995 --- /dev/null +++ b/springcloud/spring-cloud服务路由/organizationservice/src/main/java/com/fxb/organizationservice/OrganizationserviceApplication.java @@ -0,0 +1,14 @@ +package com.fxb.organizationservice; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +public class OrganizationserviceApplication { + + public static void main(String[] args) { + SpringApplication.run(OrganizationserviceApplication.class, args); + } +} diff --git a/springcloud/spring-cloud服务路由/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java b/springcloud/spring-cloud服务路由/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java new file mode 100644 index 0000000..c8c9b74 --- /dev/null +++ b/springcloud/spring-cloud服务路由/organizationservice/src/main/java/com/fxb/organizationservice/controller/OrganizationController.java @@ -0,0 +1,33 @@ +package com.fxb.organizationservice.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2018/11/22 18:23 + */ +@RestController +public class OrganizationController { + + private static int count=1; + + @GetMapping(value = "/organization/{orgId}") + public Object getOrganizationInfo(@PathVariable("orgId") String orgId) throws Exception{ +// if(count%2==0){ +// TimeUnit.SECONDS.sleep(2); +// } +// count++; + Map data = new HashMap<>(2); + data.put("id", orgId); + data.put("name", orgId + "公司"); + return data; + } +} diff --git a/springcloud/spring-cloud服务路由/organizationservice/src/main/resources/application.properties b/springcloud/spring-cloud服务路由/organizationservice/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/springcloud/spring-cloud服务路由/organizationservice/src/main/resources/bootstrap.yml b/springcloud/spring-cloud服务路由/organizationservice/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..d8e721f --- /dev/null +++ b/springcloud/spring-cloud服务路由/organizationservice/src/main/resources/bootstrap.yml @@ -0,0 +1,18 @@ +spring: + application: + #指定名称,以便spring cloud config客户端知道查找哪个配置 + name: organizationservice + profiles: + #指定环境 + active: dev + cloud: + config: + enabled: true +eureka: + instance: + prefer-ip-address: true + client: + register-with-eureka: true + fetch-registry: true + service-url: + defaultZone: http://localhost:8761/eureka/ \ No newline at end of file diff --git a/springcloud/spring-cloud服务路由/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java b/springcloud/spring-cloud服务路由/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java new file mode 100644 index 0000000..8909128 --- /dev/null +++ b/springcloud/spring-cloud服务路由/organizationservice/src/test/java/com/fxb/organizationservice/OrganizationserviceApplicationTests.java @@ -0,0 +1,16 @@ +package com.fxb.organizationservice; + +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 OrganizationserviceApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/springcloud/spring-cloud服务路由/zuul_svr/pom.xml b/springcloud/spring-cloud服务路由/zuul_svr/pom.xml new file mode 100644 index 0000000..33f5807 --- /dev/null +++ b/springcloud/spring-cloud服务路由/zuul_svr/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 1.4.4.RELEASE + + + com.fxb + zuul_svr + 0.0.1-SNAPSHOT + zuul_svr + Demo project for Spring Boot + + + 1.8 + + + + + org.springframework.cloud + spring-cloud-dependencies + Camden.SR5 + pom + import + + + + + + + org.springframework.cloud + spring-cloud-starter-zuul + + + org.springframework.cloud + spring-cloud-starter-eureka + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/ZuulSvrApplication.java b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/ZuulSvrApplication.java new file mode 100644 index 0000000..677e89f --- /dev/null +++ b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/ZuulSvrApplication.java @@ -0,0 +1,18 @@ +package com.fxb.zuul_svr; + +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 ZuulSvrApplication { + + public static void main(String[] args) { + SpringApplication.run(ZuulSvrApplication.class, args); + } + +} + diff --git a/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/IdFilter.java b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/IdFilter.java new file mode 100644 index 0000000..2b649ae --- /dev/null +++ b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/IdFilter.java @@ -0,0 +1,66 @@ +package com.fxb.zuul_svr.filter; + +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/1/8 18:48 + */ +@Component +public class IdFilter extends ZuulFilter { + + private static final Logger LOGGER = LoggerFactory.getLogger(IdFilter.class); + + /** + * 返回过滤器类型 ;pre:前置过滤器。post:后置过滤器。routing:路由过滤器。error:错误过滤器 + */ + @Override + public String filterType() { + return "pre"; + } + + /** + * 过滤器执行顺序 + */ + @Override + public int filterOrder() { + return 1; + } + + /** + * 是否启动此过滤器 + */ + @Override + public boolean shouldFilter() { + return true; + } + + @Override + public Object run() { + RequestContext ctx = RequestContext.getCurrentContext(); + String id = ctx.getRequest().getHeader("id"); + //如果request找不到,再到zuul的方法中找id.request不允许直接修改response中的header, + // 所以为了让后续的过滤器能够获取到id才有下面的语法 + if(id==null){ + id = ctx.getZuulRequestHeaders().get("id"); + } + + if (id == null) { + id = UUID.randomUUID().toString(); + LOGGER.info("{} 无id,生成id:{}",ctx.getRequest().getRequestURI(), id); + ctx.addZuulRequestHeader("id", id); + } else { + LOGGER.info("{}存在id:{}", ctx.getRequest().getRequestURI(), id); + } + return null; + } +} diff --git a/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/ResponseFilter.java b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/ResponseFilter.java new file mode 100644 index 0000000..61946e8 --- /dev/null +++ b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/ResponseFilter.java @@ -0,0 +1,64 @@ +package com.fxb.zuul_svr.filter; + +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/1/8 18:48 + */ +@Component +public class ResponseFilter extends ZuulFilter { + + private static final Logger LOGGER = LoggerFactory.getLogger(ResponseFilter.class); + + /** + * 返回过滤器类型 ;pre:前置过滤器。post:后置过滤器。routing:路由过滤器。error:错误过滤器 + */ + @Override + public String filterType() { + return "post"; + } + + /** + * 过滤器执行顺序 + */ + @Override + public int filterOrder() { + return 1; + } + + /** + * 是否启动此过滤器 + */ + @Override + public boolean shouldFilter() { + return true; + } + + @Override + public Object run(){ + RequestContext ctx = RequestContext.getCurrentContext(); + String id = ctx.getZuulRequestHeaders().get("id"); + ctx.getResponse().addHeader("id", id); + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(ctx.getResponseDataStream())); + String response = reader.readLine(); + LOGGER.info("响应为:{}", response); + //写到输出流中,本来可以由zuul框架来操作,但是我们已经读取了输入流,zuul读不到数据了,所以要手动写响应到response + ctx.getResponse().setHeader("Content-Type","application/json;charset=utf-8"); + ctx.getResponse().getWriter().write(response); + } catch (Exception e) { + } + return null; + } +} diff --git a/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/RouteFilter.java b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/RouteFilter.java new file mode 100644 index 0000000..2d8fea6 --- /dev/null +++ b/springcloud/spring-cloud服务路由/zuul_svr/src/main/java/com/fxb/zuul_svr/filter/RouteFilter.java @@ -0,0 +1,56 @@ +package com.fxb.zuul_svr.filter; + +import com.netflix.zuul.ZuulFilter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/1/8 18:48 + */ +@Component +public class RouteFilter extends ZuulFilter { + + private static final Logger LOGGER = LoggerFactory.getLogger(RouteFilter.class); + + /** + * 返回过滤器类型 ;pre:前置过滤器。post:后置过滤器。routing:路由过滤器。error:错误过滤器 + */ + @Override + public String filterType() { + return "routing"; + } + + /** + * 过滤器执行顺序 + */ + @Override + public int filterOrder() { + return 1; + } + + /** + * 是否启动此过滤器 + */ + @Override + public boolean shouldFilter() { + return true; + } + + @Override + public Object run(){ + /** + * 下面只写出实现思路,真的完全实现下面的功能,代码量较大,可以参考spring 微服务实战中的实现点击跳转 + * + * 1.获取当前路径 + * 2.判断是否需要进行特殊路由 + * 3.如需要进行特殊路由,在此发起http请求 + * 3.将响应写到response返回给调用者 + */ + return null; + } +} diff --git a/springcloud/spring-cloud服务路由/zuul_svr/src/main/resources/application.yml b/springcloud/spring-cloud服务路由/zuul_svr/src/main/resources/application.yml new file mode 100644 index 0000000..d0955f1 --- /dev/null +++ b/springcloud/spring-cloud服务路由/zuul_svr/src/main/resources/application.yml @@ -0,0 +1,38 @@ +spring: + application: + name: zuulservice +#服务发现配置 +eureka: + instance: + prefer-ip-address: true + client: + register-with-eureka: true + fetch-registry: true + service-url: + defaultZone: http://localhost:8761/eureka/ +server: + port: 5555 + +#zuul配置 +zuul: + routes: + #用于内部识别关键字 + licensestatic: + path: /licensestatic/** + serviceId: licensestatic + organizationservice: /org/** + # 使用","分隔,“*”表示全部忽略 + ignored-services: 'organizationservice' + prefix: /apis + + +ribbon: + readTimeOut: 7000 + eureka: + #禁用Eureka支持 + enabled: false + +licensestatic: + ribbon: + #licensestatic服务将会路由到下列地址 + listOfServers: http://localhost:10011,http://localhost:10012 diff --git a/springcloud/spring-cloud服务路由/zuul_svr/src/test/java/com/fxb/zuul_svr/ZuulSvrApplicationTests.java b/springcloud/spring-cloud服务路由/zuul_svr/src/test/java/com/fxb/zuul_svr/ZuulSvrApplicationTests.java new file mode 100644 index 0000000..97920ac --- /dev/null +++ b/springcloud/spring-cloud服务路由/zuul_svr/src/test/java/com/fxb/zuul_svr/ZuulSvrApplicationTests.java @@ -0,0 +1,17 @@ +package com.fxb.zuul_svr; + +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 ZuulSvrApplicationTests { + + @Test + public void contextLoads() { + } + +} +