diff --git a/spring-cloud-16/.gitignore b/spring-cloud-16/.gitignore new file mode 100644 index 0000000..4de35a3 --- /dev/null +++ b/spring-cloud-16/.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-16/pom.xml b/spring-cloud-16/pom.xml new file mode 100644 index 0000000..de28f2f --- /dev/null +++ b/spring-cloud-16/pom.xml @@ -0,0 +1,86 @@ + + + 4.0.0 + + com.roncoo.education + spring-cloud-16 + 0.0.1-SNAPSHOT + pom + + spring-cloud-16 + roncoo-spring-cloud project for Spring Boot + + + spring-cloud-bean-16 + spring-cloud-api-16 + spring-cloud-consumer-16 + spring-cloud-provider-16 + spring-cloud-service-16 + + + + + + + io.spring.platform + platform-bom + Brussels-SR1 + + + + + UTF-8 + UTF-8 + 1.8 + + + + + + com.roncoo.education + spring-cloud-bean-16 + ${project.version} + + + com.roncoo.education + spring-cloud-api-16 + ${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-16/spring-cloud-api-16/pom.xml b/spring-cloud-16/spring-cloud-api-16/pom.xml new file mode 100644 index 0000000..2b687fe --- /dev/null +++ b/spring-cloud-16/spring-cloud-api-16/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-16 + 0.0.1-SNAPSHOT + + + spring-cloud-api-16 + jar + + spring-cloud-api-16 + spring-cloud project for Spring Boot + + + + com.roncoo.education + spring-cloud-bean-16 + + + + org.springframework.cloud + spring-cloud-starter-feign + + + diff --git a/spring-cloud-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/IRoncooBiz.java b/spring-cloud-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/IRoncooBiz.java new file mode 100644 index 0000000..2050357 --- /dev/null +++ b/spring-cloud-16/spring-cloud-api-16/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-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/IUserBiz.java b/spring-cloud-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/IUserBiz.java new file mode 100644 index 0000000..0f0eb5b --- /dev/null +++ b/spring-cloud-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/IUserBiz.java @@ -0,0 +1,52 @@ +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; + +import com.roncoo.education.feign.configuration.RcFeignConfiguration; +import com.roncoo.education.service.UserService; + +/** + * @author wujing + */ +@FeignClient(value = "spring-cloud-provider", configuration = RcFeignConfiguration.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-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java b/spring-cloud-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java new file mode 100644 index 0000000..9639146 --- /dev/null +++ b/spring-cloud-16/spring-cloud-api-16/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java @@ -0,0 +1,19 @@ +package com.roncoo.education.feign.configuration; +import org.springframework.context.annotation.Bean; + +import feign.Logger; + +//@Configuration +public class RcFeignConfiguration { + + @Bean + public Logger.Level feignLoggerLevel() { + return feign.Logger.Level.FULL; + } + + /*@Bean + public Contract feignContract() { + return new feign.Contract.Default(); + }*/ + +} diff --git a/spring-cloud-16/spring-cloud-bean-16/pom.xml b/spring-cloud-16/spring-cloud-bean-16/pom.xml new file mode 100644 index 0000000..02a81e1 --- /dev/null +++ b/spring-cloud-16/spring-cloud-bean-16/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-16 + 0.0.1-SNAPSHOT + + + spring-cloud-bean-16 + jar + + spring-cloud-bean-16 + spring-cloud project for Spring Boot + + + + org.springframework.boot + spring-boot-starter-web + + + + diff --git a/spring-cloud-16/spring-cloud-bean-16/src/main/java/com/roncoo/education/bean/User.java b/spring-cloud-16/spring-cloud-bean-16/src/main/java/com/roncoo/education/bean/User.java new file mode 100644 index 0000000..0bf4fc1 --- /dev/null +++ b/spring-cloud-16/spring-cloud-bean-16/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-16/spring-cloud-bean-16/src/main/java/com/roncoo/education/service/UserService.java b/spring-cloud-16/spring-cloud-bean-16/src/main/java/com/roncoo/education/service/UserService.java new file mode 100644 index 0000000..0168085 --- /dev/null +++ b/spring-cloud-16/spring-cloud-bean-16/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-16/spring-cloud-consumer-16/pom.xml b/spring-cloud-16/spring-cloud-consumer-16/pom.xml new file mode 100644 index 0000000..c94a387 --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-16 + 0.0.1-SNAPSHOT + + + spring-cloud-consumer-16 + jar + + spring-cloud-consumer-16 + 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-16 + + + 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-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/ConsumerApplication.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/ConsumerApplication.java new file mode 100644 index 0000000..0d77b7e --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java new file mode 100644 index 0000000..2c9da7e --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java new file mode 100644 index 0000000..426fa6b --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java new file mode 100644 index 0000000..1aa4cd4 --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java new file mode 100644 index 0000000..498542b --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java new file mode 100644 index 0000000..18beb71 --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/controller/FeignUserController.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/controller/FeignUserController.java new file mode 100644 index 0000000..8677088 --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/controller/FeignUserController.java @@ -0,0 +1,39 @@ +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.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 String 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)); + return userBiz.view1(id); + } +} diff --git a/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/controller/UserController.java b/spring-cloud-16/spring-cloud-consumer-16/src/main/java/com/roncoo/education/controller/UserController.java new file mode 100644 index 0000000..dc6121c --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-consumer-16/src/main/resources/application.properties b/spring-cloud-16/spring-cloud-consumer-16/src/main/resources/application.properties new file mode 100644 index 0000000..f774fdc --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/src/main/resources/application.properties @@ -0,0 +1,46 @@ +# server +server.port=8888 + +# spring +spring.application.name=spring-cloud-consumer + +# eureka +#eureka.client.serviceUrl.defaultZone=http://localhost:8761/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 + diff --git a/spring-cloud-16/spring-cloud-consumer-16/src/test/java/com/roncoo/education/ConsumerApplicationTests.java b/spring-cloud-16/spring-cloud-consumer-16/src/test/java/com/roncoo/education/ConsumerApplicationTests.java new file mode 100644 index 0000000..4b1701b --- /dev/null +++ b/spring-cloud-16/spring-cloud-consumer-16/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-16/spring-cloud-provider-16/pom.xml b/spring-cloud-16/spring-cloud-provider-16/pom.xml new file mode 100644 index 0000000..a1901c3 --- /dev/null +++ b/spring-cloud-16/spring-cloud-provider-16/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-16 + 0.0.1-SNAPSHOT + + + spring-cloud-provider-16 + jar + + spring-cloud-provider-16 + spring-cloud project for Spring Boot + + + + com.roncoo.education + spring-cloud-bean-16 + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-devtools + + + 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-16/spring-cloud-provider-16/src/main/java/com/roncoo/education/ProviderApplication.java b/spring-cloud-16/spring-cloud-provider-16/src/main/java/com/roncoo/education/ProviderApplication.java new file mode 100644 index 0000000..605349c --- /dev/null +++ b/spring-cloud-16/spring-cloud-provider-16/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-16/spring-cloud-provider-16/src/main/java/com/roncoo/education/controller/ApiUserController.java b/spring-cloud-16/spring-cloud-provider-16/src/main/java/com/roncoo/education/controller/ApiUserController.java new file mode 100644 index 0000000..ec60072 --- /dev/null +++ b/spring-cloud-16/spring-cloud-provider-16/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-16/spring-cloud-provider-16/src/main/java/com/roncoo/education/controller/FeignApiUserController.java b/spring-cloud-16/spring-cloud-provider-16/src/main/java/com/roncoo/education/controller/FeignApiUserController.java new file mode 100644 index 0000000..4bb356b --- /dev/null +++ b/spring-cloud-16/spring-cloud-provider-16/src/main/java/com/roncoo/education/controller/FeignApiUserController.java @@ -0,0 +1,31 @@ +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("无境1"); + user.setCreateTime(new Date()); + logger.info("请求接口返回:{}", user); + return user; + } + +} diff --git a/spring-cloud-16/spring-cloud-provider-16/src/main/resources/application.properties b/spring-cloud-16/spring-cloud-provider-16/src/main/resources/application.properties new file mode 100644 index 0000000..8cfa2a5 --- /dev/null +++ b/spring-cloud-16/spring-cloud-provider-16/src/main/resources/application.properties @@ -0,0 +1,29 @@ +# server +server.port=7778 + +# spring +spring.application.name=spring-cloud-provider + +# eureka +#eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ +eureka.client.serviceUrl.defaultZone=http://roncoo:123456@roncoo1: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-16/spring-cloud-provider-16/src/test/java/com/roncoo/education/ProviderApplicationTests.java b/spring-cloud-16/spring-cloud-provider-16/src/test/java/com/roncoo/education/ProviderApplicationTests.java new file mode 100644 index 0000000..e1d3cbb --- /dev/null +++ b/spring-cloud-16/spring-cloud-provider-16/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-16/spring-cloud-service-16/pom.xml b/spring-cloud-16/spring-cloud-service-16/pom.xml new file mode 100644 index 0000000..b5e73db --- /dev/null +++ b/spring-cloud-16/spring-cloud-service-16/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-16 + 0.0.1-SNAPSHOT + + + spring-cloud-service-16 + jar + + spring-cloud-service-16 + 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-16/spring-cloud-service-16/src/main/java/com/roncoo/education/ServiceApplication.java b/spring-cloud-16/spring-cloud-service-16/src/main/java/com/roncoo/education/ServiceApplication.java new file mode 100644 index 0000000..4a45de0 --- /dev/null +++ b/spring-cloud-16/spring-cloud-service-16/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-16/spring-cloud-service-16/src/main/resources/application.properties b/spring-cloud-16/spring-cloud-service-16/src/main/resources/application.properties new file mode 100644 index 0000000..35c17e9 --- /dev/null +++ b/spring-cloud-16/spring-cloud-service-16/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-16/spring-cloud-service-16/src/test/java/com/roncoo/education/ServiceApplicationTests.java b/spring-cloud-16/spring-cloud-service-16/src/test/java/com/roncoo/education/ServiceApplicationTests.java new file mode 100644 index 0000000..17cd49c --- /dev/null +++ b/spring-cloud-16/spring-cloud-service-16/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() { + } + +}