diff --git a/spring-cloud-17/.gitignore b/spring-cloud-17/.gitignore new file mode 100644 index 0000000..4de35a3 --- /dev/null +++ b/spring-cloud-17/.gitignore @@ -0,0 +1,9 @@ +*/target/ +*.project +*.classpath +*.project +*.settings +*.mvn +*.project +*.springBeans +*.bin \ No newline at end of file diff --git a/spring-cloud-17/pom.xml b/spring-cloud-17/pom.xml new file mode 100644 index 0000000..8d6c4b0 --- /dev/null +++ b/spring-cloud-17/pom.xml @@ -0,0 +1,86 @@ + + + 4.0.0 + + com.roncoo.education + spring-cloud-17 + 0.0.1-SNAPSHOT + pom + + spring-cloud-17 + roncoo-spring-cloud project for Spring Boot + + + spring-cloud-bean-17 + spring-cloud-api-17 + spring-cloud-consumer-17 + spring-cloud-provider-17 + spring-cloud-service-17 + + + + + + + io.spring.platform + platform-bom + Brussels-SR1 + + + + + UTF-8 + UTF-8 + 1.8 + + + + + + com.roncoo.education + spring-cloud-bean-17 + ${project.version} + + + com.roncoo.education + spring-cloud-api-17 + ${project.version} + + + + + org.springframework.cloud + spring-cloud-dependencies + Camden.SR6 + + pom + import + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + diff --git a/spring-cloud-17/spring-cloud-api-17/pom.xml b/spring-cloud-17/spring-cloud-api-17/pom.xml new file mode 100644 index 0000000..aafd324 --- /dev/null +++ b/spring-cloud-17/spring-cloud-api-17/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-17 + 0.0.1-SNAPSHOT + + + spring-cloud-api-17 + jar + + spring-cloud-api-17 + roncoo-spring-cloud project for Spring Boot + + + + com.roncoo.education + spring-cloud-bean-17 + + + + org.springframework.cloud + spring-cloud-starter-feign + + + diff --git a/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/IRoncooBiz.java b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/IRoncooBiz.java new file mode 100644 index 0000000..2050357 --- /dev/null +++ b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/IRoncooBiz.java @@ -0,0 +1,16 @@ +package com.roncoo.education.feign; +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 wujing + */ +@FeignClient(value = "roncoo", url = "www.roncoo.com") +public interface IRoncooBiz { + + @RequestMapping(value = "/{url}", method = RequestMethod.GET) + String get(@PathVariable(name = "url") String url); + +} diff --git a/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/IUserBiz.java b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/IUserBiz.java new file mode 100644 index 0000000..56d911f --- /dev/null +++ b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/IUserBiz.java @@ -0,0 +1,50 @@ +package com.roncoo.education.feign; +import org.springframework.cloud.netflix.feign.FeignClient; + +import com.roncoo.education.feign.configuration.RcFeignConfiguration; +import com.roncoo.education.feign.fallback.RcFeignFallback; +import com.roncoo.education.service.UserService; + +/** + * @author wujing + */ +@FeignClient(value = "spring-cloud-provider", configuration = RcFeignConfiguration.class, fallback = RcFeignFallback.class) +public interface IUserBiz extends UserService{ + + // @RequestMapping(value = "/api/user/{id}", method = RequestMethod.GET) + // String view1(@PathVariable(name = "id") int id); + //说明:method需要指定 + + //@RequestLine("GET /api/user/{id}") + //String view1(@Param(value = "id") int id); + + //@GetMapping(value = "/api/user/{id}") + //String view1(@PathVariable(name = "id") int id); + + + // 不支持该方式传值,启动出错。 + //@RequestMapping(value = "/api/user/get/{id}", method = RequestMethod.GET) + //User get3(@PathVariable(value = "id") int id, @RequestParam String name); + + /*@RequestMapping(value = "/api/user/get/{id}", method = RequestMethod.GET) + User get4(@PathVariable(value = "id") int id, @RequestParam Map name); + + @RequestMapping(value = "/api/user/get/{id}", method = RequestMethod.GET) + User get5(@PathVariable(value = "id") int id, @RequestParam(value = "name") String name); + + @RequestMapping(value = "/api/user/get/{id}", method = RequestMethod.GET) + User get1(@PathVariable(value = "id") int id, String name); + + @RequestMapping(value = "/api/user/get/{id}", method = RequestMethod.GET) + User get2(@PathVariable(value = "id") int id, Map name); + + @RequestMapping(value = "/api/user/{id}", method = RequestMethod.GET) + User view(@PathVariable(value = "id") int id); + + //@RequestMapping(value = "/api/user/{id}", method = RequestMethod.GET) + //String view1(@PathVariable(value = "id") int id); + + @RequestMapping(value = "/api/user/{id}", method = RequestMethod.GET) + Map view2(@PathVariable(value = "id") int id);*/ + +} diff --git a/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java new file mode 100644 index 0000000..ead60b1 --- /dev/null +++ b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java @@ -0,0 +1,47 @@ +package com.roncoo.education.feign.configuration; +import java.lang.reflect.Method; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Scope; + +import com.netflix.hystrix.HystrixCommand; +import com.netflix.hystrix.HystrixCommand.Setter; +import com.netflix.hystrix.HystrixCommandGroupKey; +import com.netflix.hystrix.HystrixCommandKey; + +import feign.Feign; +import feign.Logger; +import feign.Target; +import feign.hystrix.HystrixFeign; +import feign.hystrix.SetterFactory; + +//@Configuration +public class RcFeignConfiguration { + + @Bean + public Logger.Level feignLoggerLevel() { + return feign.Logger.Level.FULL; + } + + /*@Bean + public Contract feignContract() { + return new feign.Contract.Default(); + }*/ + + @Bean + @Scope("prototype") + public Feign.Builder feignBuilder() { + class RcSetterFactory implements SetterFactory { + @Override + public Setter create(Target target, Method method) { + String groupKey = target.name(); + String commandKey = method.getName(); + return HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey)) + .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey)); + } + } + return HystrixFeign.builder().setterFactory(new RcSetterFactory()); + // return Feign.builder(); + } + +} diff --git a/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/fallback/RcFeignFallback.java b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/fallback/RcFeignFallback.java new file mode 100644 index 0000000..fbfd7fe --- /dev/null +++ b/spring-cloud-17/spring-cloud-api-17/src/main/java/com/roncoo/education/feign/fallback/RcFeignFallback.java @@ -0,0 +1,23 @@ +package com.roncoo.education.feign.fallback; + +import java.util.Date; + +import org.springframework.stereotype.Component; + +import com.roncoo.education.bean.User; +import com.roncoo.education.feign.IUserBiz; + +@Component +public class RcFeignFallback implements IUserBiz { + @Override + public User find(int id) { + System.out.println("断路器"); + User user = new User(); + user.setId(id); + user.setName("断路器"); + user.setCreateTime(new Date()); + return user; + } + + +} diff --git a/spring-cloud-17/spring-cloud-bean-17/pom.xml b/spring-cloud-17/spring-cloud-bean-17/pom.xml new file mode 100644 index 0000000..ade7e2c --- /dev/null +++ b/spring-cloud-17/spring-cloud-bean-17/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-17 + 0.0.1-SNAPSHOT + + + spring-cloud-bean-17 + jar + + spring-cloud-bean-17 + roncoo-spring-cloud project for Spring Boot + + + + org.springframework.boot + spring-boot-starter-web + + + + diff --git a/spring-cloud-17/spring-cloud-bean-17/src/main/java/com/roncoo/education/bean/User.java b/spring-cloud-17/spring-cloud-bean-17/src/main/java/com/roncoo/education/bean/User.java new file mode 100644 index 0000000..0bf4fc1 --- /dev/null +++ b/spring-cloud-17/spring-cloud-bean-17/src/main/java/com/roncoo/education/bean/User.java @@ -0,0 +1,44 @@ +package com.roncoo.education.bean; + +import java.util.Date; + +/** + * 实体类 + * + * @author wujing + */ +public class User { + private int id; + private String name; + private Date createTime; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Override + public String toString() { + return "RoncooUser [id=" + id + ", name=" + name + ", createTime=" + createTime + "]"; + } + +} diff --git a/spring-cloud-17/spring-cloud-bean-17/src/main/java/com/roncoo/education/service/UserService.java b/spring-cloud-17/spring-cloud-bean-17/src/main/java/com/roncoo/education/service/UserService.java new file mode 100644 index 0000000..0168085 --- /dev/null +++ b/spring-cloud-17/spring-cloud-bean-17/src/main/java/com/roncoo/education/service/UserService.java @@ -0,0 +1,13 @@ +package com.roncoo.education.service; + +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import com.roncoo.education.bean.User; + +public interface UserService { + + @RequestMapping(method = RequestMethod.GET, value = "/api/user/find/{id}") + User find(@PathVariable(value = "id") int id); +} diff --git a/spring-cloud-17/spring-cloud-consumer-17/pom.xml b/spring-cloud-17/spring-cloud-consumer-17/pom.xml new file mode 100644 index 0000000..c104c72 --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-17 + 0.0.1-SNAPSHOT + + + spring-cloud-consumer-17 + jar + + spring-cloud-consumer-17 + roncoo-spring-cloud project for Spring Boot + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.cloud + spring-cloud-starter-hystrix + + + + com.roncoo.education + spring-cloud-api-17 + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + + diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/ConsumerApplication.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/ConsumerApplication.java new file mode 100644 index 0000000..0d77b7e --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/ConsumerApplication.java @@ -0,0 +1,27 @@ +package com.roncoo.education; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; + +@EnableCircuitBreaker +@EnableFeignClients +@EnableEurekaClient +@SpringBootApplication +public class ConsumerApplication { + + @Bean + @LoadBalanced + protected RestTemplate restTemplate() { + return new RestTemplate(); + } + + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } +} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java new file mode 100644 index 0000000..2c9da7e --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java @@ -0,0 +1,9 @@ +//package com.roncoo.education.configuration; +//import org.springframework.cloud.netflix.ribbon.RibbonClient; +//import org.springframework.context.annotation.Configuration; +// +//@Configuration +//@RibbonClient(name = "spring-cloud-provider2", configuration = RoundRobinRuleConfig.class) +//public class Provider2Configuration { +// +//} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java new file mode 100644 index 0000000..426fa6b --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java @@ -0,0 +1,10 @@ +//package com.roncoo.education.configuration; +// +//import org.springframework.cloud.netflix.ribbon.RibbonClient; +//import org.springframework.context.annotation.Configuration; +// +//@Configuration +//@RibbonClient(name = "spring-cloud-provider", configuration = RandomRuleConfig.class) +//public class ProviderConfiguration { +// +//} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java new file mode 100644 index 0000000..1aa4cd4 --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java @@ -0,0 +1,18 @@ +//package com.roncoo.education.configuration; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import com.netflix.loadbalancer.IRule; +//import com.netflix.loadbalancer.RandomRule; +// +///** +// * 随机算法 +// * +// * @author wujing +// */ +////@Configuration +//public class RandomRuleConfig { +// @Bean +// public IRule randomRule() { +// return new RandomRule(); +// } +//} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java new file mode 100644 index 0000000..498542b --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java @@ -0,0 +1,64 @@ +package com.roncoo.education.configuration; + +import java.util.List; + +import com.netflix.client.config.IClientConfig; +import com.netflix.loadbalancer.AbstractLoadBalancerRule; +import com.netflix.loadbalancer.ILoadBalancer; +import com.netflix.loadbalancer.Server; + +/** + * 自定义Ribbon的负载均衡策略 + * + */ +public class RoncooCustomRule extends AbstractLoadBalancerRule { + + private Server choose(ILoadBalancer lb, Object key) { + if (lb == null) { + return null; + } + Server server = null; + + while (server == null) { + if (Thread.interrupted()) { + return null; + } + + List upList = lb.getReachableServers(); // 可用的服务实例 + + // 只获取端口为:7779的服务实例 + for (Server s : upList) { + if (s.getPort() == 7779) { + server = s; + } + } + + if (server == null) { + Thread.yield(); + continue; + } + + System.out.println("实例IP:" + server.getHost() + " 端口:" + server.getPort()); + + if (server.isAlive()) { + return (server); + } + + server = null; + Thread.yield(); + } + + return server; + } + + @Override + public Server choose(Object key) { + return choose(getLoadBalancer(), key); + } + + @Override + public void initWithNiwsConfig(IClientConfig clientConfig) { + // TODO Auto-generated method stub + } + +} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java new file mode 100644 index 0000000..18beb71 --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java @@ -0,0 +1,17 @@ +//package com.roncoo.education.configuration; +//import org.springframework.context.annotation.Bean; +//import com.netflix.loadbalancer.IRule; +//import com.netflix.loadbalancer.RandomRule; +//import com.netflix.loadbalancer.RoundRobinRule; +///** +// * 轮询算法 +// * +// * @author wujing +// */ +//// @Configuration +//public class RoundRobinRuleConfig { +// @Bean +// public IRule roundRobinRule() { +// return new RandomRule(); +// } +//} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/controller/FeignUserController.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/controller/FeignUserController.java new file mode 100644 index 0000000..5f776c8 --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/controller/FeignUserController.java @@ -0,0 +1,42 @@ +package com.roncoo.education.controller; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.roncoo.education.bean.User; +import com.roncoo.education.feign.IRoncooBiz; +import com.roncoo.education.feign.IUserBiz; + +/** + * @author wujing + */ +@RestController +@RequestMapping(value = "/feign/user", method = RequestMethod.POST) +public class FeignUserController { + + @Autowired + private IUserBiz userBiz; + + @Autowired + private IRoncooBiz roncooBiz; + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public User get(@PathVariable(value = "id") int id) { + //System.out.println(userBiz.view(id)); + //System.out.println(userBiz.view1(id)); + //System.out.println(userBiz.view2(id)); + + //String name = "测试1"; + //Map map = new HashMap<>(); + //map.put("name", "测试2"); + //userBiz.get4(id, map); + //userBiz.get5(id, name); + //System.out.println(roncooBiz.get("course/list.html")); + //System.out.println(userBiz.find(id)); + User user = userBiz.find(id); + System.out.println(user); + return user; + } +} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/controller/UserController.java b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/controller/UserController.java new file mode 100644 index 0000000..dc6121c --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/java/com/roncoo/education/controller/UserController.java @@ -0,0 +1,44 @@ + +package com.roncoo.education.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestTemplate; + +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; + +/** + * @author wujing + */ +@RestController +@RequestMapping(value = "/user", method = RequestMethod.POST) +public class UserController { + + // private static final String URL="http://localhost:7777/api/user/{id}"; + private static final String URL = "http://spring-cloud-provider/api/user/{id}"; + private static final String URL2 = "http://spring-cloud-provider2/api/user/{id}"; + + @Autowired + private RestTemplate restTemplate; + + // @HystrixCommand(fallbackMethod = "getFallback", commandProperties = @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "SEMAPHORE")) + @HystrixCommand(fallbackMethod = "getFallback") + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String get(@PathVariable(value = "id") int id) { + return restTemplate.getForObject(URL, String.class, id); + } + + public String getFallback(int id) { + System.out.println("调用远程接口异常,返回自定义信息"); + return "自定义信息"; + } + + @RequestMapping(value = "/2/{id}", method = RequestMethod.GET) + public String get2(@PathVariable(value = "id") int id) { + return restTemplate.getForObject(URL2, String.class, id); + } + +} diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/main/resources/application.properties b/spring-cloud-17/spring-cloud-consumer-17/src/main/resources/application.properties new file mode 100644 index 0000000..74ff8fb --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/main/resources/application.properties @@ -0,0 +1,54 @@ +# server +server.port=8888 + +# spring +spring.application.name=spring-cloud-consumer + +# eureka +eureka.client.serviceUrl.defaultZone=http://roncoo:123456@localhost:8761/eureka/ + +# info自定义 +info.build.name=@project.name@ +info.build.description=@project.description@ +info.build.groupId=@project.groupId@ +info.build.artifact=@project.artifactId@ +info.build.version=@project.version@ + +eureka.instance.status-page-url-path=/info +eureka.instance.instanceId=${spring.application.name}:${random.value} +eureka.instance.prefer-ip-address=true + +#设置拉取服务注册信息时间,默认60s +eureka.client.registry-fetch-interval-seconds=30 + +#指定续约更新频率,默认是30s +eureka.instance.lease-renewal-interval-in-seconds=15 + +#设置过期剔除时间,默认90s +eureka.instance.lease-expiration-duration-in-seconds=45 + +#设置策略 +#spring-cloud-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule +#spring-cloud-provider2.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule +#spring-cloud-provider.ribbon.NFLoadBalancerRuleClassName=com.roncoo.education.configuration.RoncooCustomRule +#格式为:应用名.ribbon.NFLoadBalancerRuleClassName=xxx + +# 日志配置,默认是不打印任何的日志 +logging.level.com.roncoo.education.feign=debug + +# 开启压缩 +feign.compression.request.enabled=true +feign.compression.response.enabled=true +# 更多配置 +feign.compression.request.mime-types=text/xml,application/xml,application/json +feign.compression.request.min-request-size=2048 + +# 在feign里面禁用hystrix +feign.hystrix.enabled=false + +# 在feign和Ribbon里面配置隔离策略(全局配置) +#hystrix.command.default.execution.isolation.strategy=SEMAPHORE +# 配置单个 +#hystrix.command.view1.execution.isolation.strategy=SEMAPHORE + +hystrix.command.default.execution.timeout.enabled= false diff --git a/spring-cloud-17/spring-cloud-consumer-17/src/test/java/com/roncoo/education/ConsumerApplicationTests.java b/spring-cloud-17/spring-cloud-consumer-17/src/test/java/com/roncoo/education/ConsumerApplicationTests.java new file mode 100644 index 0000000..4b1701b --- /dev/null +++ b/spring-cloud-17/spring-cloud-consumer-17/src/test/java/com/roncoo/education/ConsumerApplicationTests.java @@ -0,0 +1,16 @@ +package com.roncoo.education; + +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-17/spring-cloud-provider-17/pom.xml b/spring-cloud-17/spring-cloud-provider-17/pom.xml new file mode 100644 index 0000000..9974fe4 --- /dev/null +++ b/spring-cloud-17/spring-cloud-provider-17/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-17 + 0.0.1-SNAPSHOT + + + spring-cloud-provider-17 + jar + + spring-cloud-provider-17 + roncoo-spring-cloud project for Spring Boot + + + + com.roncoo.education + spring-cloud-bean-17 + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + + \ No newline at end of file diff --git a/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/ProviderApplication.java b/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/ProviderApplication.java new file mode 100644 index 0000000..605349c --- /dev/null +++ b/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/ProviderApplication.java @@ -0,0 +1,14 @@ +package com.roncoo.education; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@EnableEurekaClient +@SpringBootApplication +public class ProviderApplication { + + public static void main(String[] args) { + SpringApplication.run(ProviderApplication.class, args); + } +} diff --git a/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/controller/ApiUserController.java b/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/controller/ApiUserController.java new file mode 100644 index 0000000..ec60072 --- /dev/null +++ b/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/controller/ApiUserController.java @@ -0,0 +1,50 @@ +package com.roncoo.education.controller; + +import java.util.Date; + +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.roncoo.education.bean.User; + +/** + * @author wujing + */ +@RestController +@RequestMapping(value = "/api/user") +public class ApiUserController { + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @RequestMapping(value = "/get/{id}") + public User get(@PathVariable int id, @RequestBody(required = false) String json, + @RequestParam(required = false) String name, HttpServletRequest request) { + logger.info("请求方法类型:" + request.getMethod() + " RequestBody参数:" + json + " RequestParam参数:" + name); + User user = new User(); + user.setId(id); + user.setName("无境"); + user.setCreateTime(new Date()); + // logger.info("请求接口返回:{}", user); + return user; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public User view(@PathVariable int id) throws InterruptedException { + Thread.sleep(50000); + User user = new User(); + user.setId(id); + user.setName("无境1"); + user.setCreateTime(new Date()); + logger.info("请求接口返回:{}", user); + return user; + } + +} diff --git a/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/controller/FeignApiUserController.java b/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/controller/FeignApiUserController.java new file mode 100644 index 0000000..b06ce3a --- /dev/null +++ b/spring-cloud-17/spring-cloud-provider-17/src/main/java/com/roncoo/education/controller/FeignApiUserController.java @@ -0,0 +1,40 @@ +package com.roncoo.education.controller; + +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import com.roncoo.education.bean.User; +import com.roncoo.education.service.UserService; + +/** + * @author wujing + */ +@RestController +public class FeignApiUserController implements UserService { + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Override + public User find(@PathVariable int id) { + User user = new User(); + user.setId(id); + user.setName("无"); + user.setCreateTime(new Date()); + logger.info("请求接口返回:{}", user); + // throw new RuntimeException(); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return user; + } + +} diff --git a/spring-cloud-17/spring-cloud-provider-17/src/main/resources/application.properties b/spring-cloud-17/spring-cloud-provider-17/src/main/resources/application.properties new file mode 100644 index 0000000..626a419 --- /dev/null +++ b/spring-cloud-17/spring-cloud-provider-17/src/main/resources/application.properties @@ -0,0 +1,28 @@ +# server +server.port=0 + +# spring +spring.application.name=spring-cloud-provider + +# eureka +eureka.client.serviceUrl.defaultZone=http://roncoo:123456@localhost:8761/eureka/ + +# info自定义 +info.build.name=@project.name@ +info.build.description=@project.description@ +info.build.groupId=@project.groupId@ +info.build.artifact=@project.artifactId@ +info.build.version=@project.version@ + +eureka.instance.status-page-url-path=/info +eureka.instance.instanceId=${spring.application.name}:${random.value} +eureka.instance.prefer-ip-address=true + +#设置拉取服务注册信息时间,默认60s +eureka.client.registry-fetch-interval-seconds=30 + +#指定续约更新频率,默认是30s +eureka.instance.lease-renewal-interval-in-seconds=15 + +#设置过期剔除时间,默认90s +eureka.instance.lease-expiration-duration-in-seconds=45 diff --git a/spring-cloud-17/spring-cloud-provider-17/src/test/java/com/roncoo/education/ProviderApplicationTests.java b/spring-cloud-17/spring-cloud-provider-17/src/test/java/com/roncoo/education/ProviderApplicationTests.java new file mode 100644 index 0000000..e1d3cbb --- /dev/null +++ b/spring-cloud-17/spring-cloud-provider-17/src/test/java/com/roncoo/education/ProviderApplicationTests.java @@ -0,0 +1,16 @@ +package com.roncoo.education; + +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 ProviderApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-17/spring-cloud-service-17/pom.xml b/spring-cloud-17/spring-cloud-service-17/pom.xml new file mode 100644 index 0000000..72063b4 --- /dev/null +++ b/spring-cloud-17/spring-cloud-service-17/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-17 + 0.0.1-SNAPSHOT + + + spring-cloud-service-17 + jar + + spring-cloud-service-17 + roncoo-spring-cloud project for Spring Boot + + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + + diff --git a/spring-cloud-17/spring-cloud-service-17/src/main/java/com/roncoo/education/ServiceApplication.java b/spring-cloud-17/spring-cloud-service-17/src/main/java/com/roncoo/education/ServiceApplication.java new file mode 100644 index 0000000..4a45de0 --- /dev/null +++ b/spring-cloud-17/spring-cloud-service-17/src/main/java/com/roncoo/education/ServiceApplication.java @@ -0,0 +1,14 @@ +package com.roncoo.education; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@EnableEurekaServer +@SpringBootApplication +public class ServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(ServiceApplication.class, args); + } +} diff --git a/spring-cloud-17/spring-cloud-service-17/src/main/resources/application.properties b/spring-cloud-17/spring-cloud-service-17/src/main/resources/application.properties new file mode 100644 index 0000000..35c17e9 --- /dev/null +++ b/spring-cloud-17/spring-cloud-service-17/src/main/resources/application.properties @@ -0,0 +1,43 @@ +# server (eureka 默认端口为:8761) +server.port=8761 + +# spring +spring.application.name=spring-cloud-server + +# eureka +# 是否注册到eureka +eureka.client.register-with-eureka=false +# 是否从eureka获取注册信息 +eureka.client.fetch-registry=false +# eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值) +#eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/ +eureka.client.serviceUrl.defaultZone=http://roncoo:123456@localhost:8761/eureka/ +eureka.client.availability-zones.roncoo=roncooZone +eureka.client.service-url.roncooZone=http://roncoo:123456@localhost:8761/eureka/ +eureka.client.region=lll + + +# info自定义 +info.build.name=@project.name@ +info.build.description=@project.description@ +info.build.groupId=@project.groupId@ +info.build.artifact=@project.artifactId@ +info.build.version=@project.version@ + +# 指定环境 +eureka.environment=dev + +#指定数据中心 +eureka.datacenter=roncoo + +# 关闭自我保护模式 +eureka.server.enable-self-preservation=false + +#设置清理无效节点的时间间隔,默认60000,即是60s +eureka.server.eviction-interval-timer-in-ms=5000 + +# 服务认证 +security.basic.enabled=true +security.user.name=roncoo +security.user.password=123456 + diff --git a/spring-cloud-17/spring-cloud-service-17/src/test/java/com/roncoo/education/ServiceApplicationTests.java b/spring-cloud-17/spring-cloud-service-17/src/test/java/com/roncoo/education/ServiceApplicationTests.java new file mode 100644 index 0000000..17cd49c --- /dev/null +++ b/spring-cloud-17/spring-cloud-service-17/src/test/java/com/roncoo/education/ServiceApplicationTests.java @@ -0,0 +1,16 @@ +package com.roncoo.education; + +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 ServiceApplicationTests { + + @Test + public void contextLoads() { + } + +}