From 1b84b75db5d33d95634ade9446eeeb2b1b6c06e9 Mon Sep 17 00:00:00 2001 From: fxb Date: Mon, 17 Dec 2018 21:47:25 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E7=AF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- springcloud/第三篇所用代码/confsvr/pom.xml | 65 +++++++++++++++ .../main/java/com/fxb/demo/ConfsvrApplication.java | 14 ++++ .../confsvr/src/main/resources/application.yml | 25 ++++++ .../java/com/fxb/demo/ConfsvrApplicationTests.java | 16 ++++ springcloud/第三篇所用代码/eurekasvr/pom.xml | 72 +++++++++++++++++ .../java/com/fxb/eurekasvr/EurekasvrApplication.java | 14 ++++ .../eurekasvr/src/main/resources/application.yml | 12 +++ .../com/fxb/eurekasvr/EurekasvrApplicationTests.java | 16 ++++ .../第三篇所用代码/licensingservice/pom.xml | 81 +++++++++++++++++++ .../com/fxb/licensingservice/Entity/Licensing.java | 31 +++++++ .../fxb/licensingservice/Entity/Organization.java | 40 +++++++++ .../LicensingserviceApplication.java | 30 +++++++ .../client/OrganizationFeignClient.java | 32 ++++++++ .../client/OrganizationFeignClientImpl.java | 23 ++++++ .../controller/LicensingController.java | 56 +++++++++++++ .../service/OrganizationByRibbonService.java | 50 ++++++++++++ 16 files changed, 577 insertions(+) create mode 100644 springcloud/第三篇所用代码/confsvr/pom.xml create mode 100644 springcloud/第三篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java create mode 100644 springcloud/第三篇所用代码/confsvr/src/main/resources/application.yml create mode 100644 springcloud/第三篇所用代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java create mode 100644 springcloud/第三篇所用代码/eurekasvr/pom.xml create mode 100644 springcloud/第三篇所用代码/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java create mode 100644 springcloud/第三篇所用代码/eurekasvr/src/main/resources/application.yml create mode 100644 springcloud/第三篇所用代码/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java create mode 100644 springcloud/第三篇所用代码/licensingservice/pom.xml create mode 100644 springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java create mode 100644 springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java create mode 100644 springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java create mode 100644 springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java create mode 100644 springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java create mode 100644 springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java create mode 100644 springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java diff --git a/springcloud/第三篇所用代码/confsvr/pom.xml b/springcloud/第三篇所用代码/confsvr/pom.xml new file mode 100644 index 0000000..de9e7df --- /dev/null +++ b/springcloud/第三篇所用代码/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-config + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/springcloud/第三篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java b/springcloud/第三篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java new file mode 100644 index 0000000..b0f9afd --- /dev/null +++ b/springcloud/第三篇所用代码/confsvr/src/main/java/com/fxb/demo/ConfsvrApplication.java @@ -0,0 +1,14 @@ +package com.fxb.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.config.server.EnableConfigServer; + +@SpringBootApplication +@EnableConfigServer +public class ConfsvrApplication { + + public static void main(String[] args) { + SpringApplication.run(ConfsvrApplication.class, args); + } +} diff --git a/springcloud/第三篇所用代码/confsvr/src/main/resources/application.yml b/springcloud/第三篇所用代码/confsvr/src/main/resources/application.yml new file mode 100644 index 0000000..b980353 --- /dev/null +++ b/springcloud/第三篇所用代码/confsvr/src/main/resources/application.yml @@ -0,0 +1,25 @@ +server: + port: 8888 + +spring: + profiles: + # 使用文件系统来存储配置信息,需要设置为native,git设置为git + active: git + application: + name: test + cloud: + config: + server: + native: + # 使用文件来存放配置文件,为每个应用程序提供用逗号分隔的文件夹列表 + searchLocations: file:///D:/configFolder/licensingservice + git: + uri: https://github.com/FleyX/demo-project + # 查找配置文件路径(,分隔) + search-paths: springcloud/config/licensingservice + #如果为公开仓库,用户名密码可不填写 + username: + password: + #配置git仓库的分支 + label: master + diff --git a/springcloud/第三篇所用代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java b/springcloud/第三篇所用代码/confsvr/src/test/java/com/fxb/demo/ConfsvrApplicationTests.java new file mode 100644 index 0000000..3096743 --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/eurekasvr/pom.xml b/springcloud/第三篇所用代码/eurekasvr/pom.xml new file mode 100644 index 0000000..5337b2a --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java b/springcloud/第三篇所用代码/eurekasvr/src/main/java/com/fxb/eurekasvr/EurekasvrApplication.java new file mode 100644 index 0000000..0ee3302 --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/eurekasvr/src/main/resources/application.yml b/springcloud/第三篇所用代码/eurekasvr/src/main/resources/application.yml new file mode 100644 index 0000000..12cd213 --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java b/springcloud/第三篇所用代码/eurekasvr/src/test/java/com/fxb/eurekasvr/EurekasvrApplicationTests.java new file mode 100644 index 0000000..3d21ad6 --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/pom.xml b/springcloud/第三篇所用代码/licensingservice/pom.xml new file mode 100644 index 0000000..1588d1a --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java b/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Licensing.java new file mode 100644 index 0000000..f5c5d3b --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java b/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/Entity/Organization.java new file mode 100644 index 0000000..357bfa3 --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java b/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/LicensingserviceApplication.java new file mode 100644 index 0000000..bb3a3f4 --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java b/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClient.java new file mode 100644 index 0000000..6e92dd9 --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java b/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/client/OrganizationFeignClientImpl.java new file mode 100644 index 0000000..540d36b --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java b/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/controller/LicensingController.java new file mode 100644 index 0000000..85dea2f --- /dev/null +++ b/springcloud/第三篇所用代码/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/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java b/springcloud/第三篇所用代码/licensingservice/src/main/java/com/fxb/licensingservice/service/OrganizationByRibbonService.java new file mode 100644 index 0000000..829d7de --- /dev/null +++ b/springcloud/第三篇所用代码/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; + } +}