diff --git a/spring-cloud-23/.gitignore b/spring-cloud-23/.gitignore new file mode 100644 index 0000000..4de35a3 --- /dev/null +++ b/spring-cloud-23/.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-23/pom.xml b/spring-cloud-23/pom.xml new file mode 100644 index 0000000..e8768a9 --- /dev/null +++ b/spring-cloud-23/pom.xml @@ -0,0 +1,88 @@ + + + 4.0.0 + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + pom + + spring-cloud-23 + roncoo-spring-cloud project for Spring Boot + + + spring-cloud-bean-23 + spring-cloud-api-23 + spring-cloud-consumer-23 + spring-cloud-provider-23 + spring-cloud-service-23 + spring-cloud-turbine-23 + spring-cloud-gateway-23 + + + + + + + io.spring.platform + platform-bom + Brussels-SR1 + + + + + UTF-8 + UTF-8 + 1.8 + + + + + + com.roncoo.education + spring-cloud-bean-23 + ${project.version} + + + com.roncoo.education + spring-cloud-api-23 + ${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-23/spring-cloud-api-23/pom.xml b/spring-cloud-23/spring-cloud-api-23/pom.xml new file mode 100644 index 0000000..183d317 --- /dev/null +++ b/spring-cloud-23/spring-cloud-api-23/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + + + spring-cloud-api-23 + jar + + spring-cloud-api-23 + spring-cloud project for Spring Boot + + + + com.roncoo.education + spring-cloud-bean-23 + + + + org.springframework.cloud + spring-cloud-starter-feign + + + diff --git a/spring-cloud-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/IRoncooBiz.java b/spring-cloud-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/IRoncooBiz.java new file mode 100644 index 0000000..2050357 --- /dev/null +++ b/spring-cloud-23/spring-cloud-api-23/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-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/IUserBiz.java b/spring-cloud-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/IUserBiz.java new file mode 100644 index 0000000..5024661 --- /dev/null +++ b/spring-cloud-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/IUserBiz.java @@ -0,0 +1,53 @@ +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.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-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java b/spring-cloud-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/configuration/RcFeignConfiguration.java new file mode 100644 index 0000000..ead60b1 --- /dev/null +++ b/spring-cloud-23/spring-cloud-api-23/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-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/fallback/RcFeignFallback.java b/spring-cloud-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/fallback/RcFeignFallback.java new file mode 100644 index 0000000..e109ccf --- /dev/null +++ b/spring-cloud-23/spring-cloud-api-23/src/main/java/com/roncoo/education/feign/fallback/RcFeignFallback.java @@ -0,0 +1,19 @@ +package com.roncoo.education.feign.fallback; +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) { + return null; + } + + @Override + public String view1(int id) { + System.out.println("调用远程接口异常,返回自定义信息"); + return "system error"; + } +} diff --git a/spring-cloud-23/spring-cloud-bean-23/pom.xml b/spring-cloud-23/spring-cloud-bean-23/pom.xml new file mode 100644 index 0000000..a833d53 --- /dev/null +++ b/spring-cloud-23/spring-cloud-bean-23/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + + + spring-cloud-bean-23 + jar + + spring-cloud-bean-23 + spring-cloud project for Spring Boot + + + + org.springframework.boot + spring-boot-starter-web + + + + diff --git a/spring-cloud-23/spring-cloud-bean-23/src/main/java/com/roncoo/education/bean/User.java b/spring-cloud-23/spring-cloud-bean-23/src/main/java/com/roncoo/education/bean/User.java new file mode 100644 index 0000000..0bf4fc1 --- /dev/null +++ b/spring-cloud-23/spring-cloud-bean-23/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-23/spring-cloud-bean-23/src/main/java/com/roncoo/education/service/UserService.java b/spring-cloud-23/spring-cloud-bean-23/src/main/java/com/roncoo/education/service/UserService.java new file mode 100644 index 0000000..0168085 --- /dev/null +++ b/spring-cloud-23/spring-cloud-bean-23/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-23/spring-cloud-consumer-23/pom.xml b/spring-cloud-23/spring-cloud-consumer-23/pom.xml new file mode 100644 index 0000000..4037f71 --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + + + spring-cloud-consumer-23 + jar + + spring-cloud-consumer-23 + 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-23 + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-devtools + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + + diff --git a/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/ConsumerApplication.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/ConsumerApplication.java new file mode 100644 index 0000000..0d77b7e --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java new file mode 100644 index 0000000..2c9da7e --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java new file mode 100644 index 0000000..426fa6b --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java new file mode 100644 index 0000000..1aa4cd4 --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java new file mode 100644 index 0000000..498542b --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java new file mode 100644 index 0000000..18beb71 --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/controller/FeignUserController.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/controller/FeignUserController.java new file mode 100644 index 0000000..2e89232 --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/controller/UserController.java b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/controller/UserController.java new file mode 100644 index 0000000..1074c23 --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/src/main/java/com/roncoo/education/controller/UserController.java @@ -0,0 +1,47 @@ + +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; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; +import com.netflix.hystrix.contrib.javanica.conf.HystrixPropertiesManager; + +/** + * @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", commandKey="", groupKey="") + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public String get(@PathVariable(value = "id") int id) { + //throw new RuntimeException(); + 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-23/spring-cloud-consumer-23/src/main/resources/application.properties b/spring-cloud-23/spring-cloud-consumer-23/src/main/resources/application.properties new file mode 100644 index 0000000..f82f9ba --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/src/main/resources/application.properties @@ -0,0 +1,56 @@ +# 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 + +# 在feign里面禁用hystrix +#feign.hystrix.enabled=false + +# 在feign和Ribbon里面配置隔离策略(全局配置) +#hystrix.command.default.execution.isolation.strategy=SEMAPHORE +# 配置单个 +#hystrix.command.view1.execution.isolation.strategy=SEMAPHORE + +# 元数据 +eureka.instance.metadata-map.cluster=RONCOO diff --git a/spring-cloud-23/spring-cloud-consumer-23/src/test/java/com/roncoo/education/ConsumerApplicationTests.java b/spring-cloud-23/spring-cloud-consumer-23/src/test/java/com/roncoo/education/ConsumerApplicationTests.java new file mode 100644 index 0000000..4b1701b --- /dev/null +++ b/spring-cloud-23/spring-cloud-consumer-23/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-23/spring-cloud-gateway-23/pom.xml b/spring-cloud-23/spring-cloud-gateway-23/pom.xml new file mode 100644 index 0000000..56109a4 --- /dev/null +++ b/spring-cloud-23/spring-cloud-gateway-23/pom.xml @@ -0,0 +1,25 @@ + + 4.0.0 + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + + spring-cloud-gateway-23 + + + + org.springframework.cloud + spring-cloud-starter-zuul + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-devtools + + + \ No newline at end of file diff --git a/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/GatewayApplication.java b/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/GatewayApplication.java new file mode 100644 index 0000000..1ee00da --- /dev/null +++ b/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/GatewayApplication.java @@ -0,0 +1,35 @@ +package com.roncoo.education; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.zuul.EnableZuulProxy; +import org.springframework.context.annotation.Bean; + +import com.roncoo.education.custom.CustomPreFilter; + +@EnableZuulProxy +@SpringBootApplication +public class GatewayApplication { + + @Bean + public CustomPreFilter sessionPreFilter() { + return new CustomPreFilter(); + } + + /*@Bean + public PatternServiceRouteMapper serviceRouteMapper() { + return new PatternServiceRouteMapper("(?^.*)-(?c.*)-(?c.+$)", "${name1}-${name2}-provider") { + @Override + public String apply(final String serviceId) { + String route = super.apply(serviceId); + System.out.println(route + " -> " + serviceId); + return route; + } + }; + }*/ + + + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class, args); + } +} diff --git a/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/custom/CustomPreFilter.java b/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/custom/CustomPreFilter.java new file mode 100644 index 0000000..7e00794 --- /dev/null +++ b/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/custom/CustomPreFilter.java @@ -0,0 +1,51 @@ +package com.roncoo.education.custom; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.util.ReflectionUtils; + +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; + +public class CustomPreFilter extends ZuulFilter { + + @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(); + HttpServletRequest request = ctx.getRequest(); + String token = request.getHeader("token"); + if (!"roncoo".equals(token)) { + HttpServletResponse response = ctx.getResponse(); + try { + PrintWriter writer = response.getWriter(); + writer.println("token is error"); + writer.close(); + } catch (IOException e) { + ReflectionUtils.rethrowRuntimeException(e); + } + } + + System.out.println("请求路径为:" + request.getRequestURI()); + return null; + } + +} diff --git a/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/custom/ProviderFallbackProvider.java b/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/custom/ProviderFallbackProvider.java new file mode 100644 index 0000000..7a1cd11 --- /dev/null +++ b/spring-cloud-23/spring-cloud-gateway-23/src/main/java/com/roncoo/education/custom/ProviderFallbackProvider.java @@ -0,0 +1,59 @@ +package com.roncoo.education.custom; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +@Component +public class ProviderFallbackProvider implements ZuulFallbackProvider { + + @Override + public String getRoute() { + return "spring-cloud-provider"; + } + + @Override + public ClientHttpResponse fallbackResponse() { + return new ClientHttpResponse() { + + @Override + public HttpStatus getStatusCode() throws IOException { + return HttpStatus.OK; + } + + @Override + public int getRawStatusCode() throws IOException { + return 200; + } + + @Override + public String getStatusText() throws IOException { + return "OK"; + } + + @Override + public void close() { + + } + + @Override + public InputStream getBody() throws IOException { + return new ByteArrayInputStream((getRoute()+ " is fallback").getBytes()); + } + + @Override + public HttpHeaders getHeaders() { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + return headers; + } + }; + } +} diff --git a/spring-cloud-23/spring-cloud-gateway-23/src/main/resources/application.properties b/spring-cloud-23/spring-cloud-gateway-23/src/main/resources/application.properties new file mode 100644 index 0000000..98f889f --- /dev/null +++ b/spring-cloud-23/spring-cloud-gateway-23/src/main/resources/application.properties @@ -0,0 +1,92 @@ +# server +server.port=9876 + +# spring +spring.application.name=spring-cloud-gateway + +# 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 + +# zuul...disable=true +# 禁用自定义过滤器 +zuul.CustomPreFilter.pre.disable=true + +# 路由的映射,方法1 +#zuul.routes.spring-cloud-provider=/provider/** +#zuul.routes.spring-cloud-consumer=/consumer/** +# spring-cloud-provider服务名称,对其进行路由 +# 一个*代表匹配一层,二个**代表匹配所有。 + +# 路由的映射,方法2 +#zuul.routes.provider1.path=/provider1/** +#zuul.routes.provider1.service-id=spring-cloud-provider +#zuul.routes.consumer1.path=/consumer1/** +#zuul.routes.consumer1.service-id=spring-cloud-consumer +# provider1,consumer2 代表id,随意,不重复即可 + +logging.level.com.netflix.loadbalancer=debug + +#zuul.ignored-services=spring-cloud-provider +# 注意: zuul.ignored-services=* 禁用所有 + +zuul.routes.provider1.strip-prefix=false +zuul.routes.provider1.path=/api/** +zuul.routes.provider1.service-id=spring-cloud-provider +zuul.routes.consumer1.strip-prefix=false +zuul.routes.consumer1.path=/feign/** +zuul.routes.consumer1.service-id=spring-cloud-consumer + +#zuul.routes.provider1.sensitive-headers=token +#zuul.routes.spring-cloud-provider.sensitive-headers=token +# 默认值:Cookie,Set-Cookie,Authorization +# 注意:如果不禁用服务名的情况下,通过服务名,这个设置是无效的 +# zuul.routes.spring-cloud-provider 这种配置的情况下,也是无效的 + +# 禁用注册中心 +#ribbon.eureka.enabled=false + +#zuul.routes.roncoo.path=/** +#zuul.routes.roncoo.url=http://www.roncoo.com/ + +#zuul.routes.roncoo.path=/** +#zuul.routes.roncoo.service-id=roncoo-education +#roncoo-education.ribbon.listOfServers=http://www.roncoo.com/,http://git.oschina.net/ + +zuul.ignored-patterns=/**/feign/** +# 忽略含有api的路径的url + +#zuul.routes.legacy.path=/** +#zuul.routes.legacy.url=http://www.roncoo.com +# 若前面的路由匹配不到,那么就使用这个 + +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000 +# 全局设置 +ribbon.ConnectTimeout=60000 +ribbon.ReadTimeout=60000 + + + + + + diff --git a/spring-cloud-23/spring-cloud-provider-23/pom.xml b/spring-cloud-23/spring-cloud-provider-23/pom.xml new file mode 100644 index 0000000..901eb56 --- /dev/null +++ b/spring-cloud-23/spring-cloud-provider-23/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + + + spring-cloud-provider-23 + jar + + spring-cloud-provider-23 + spring-cloud project for Spring Boot + + + + com.roncoo.education + spring-cloud-bean-23 + + + + 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-23/spring-cloud-provider-23/src/main/java/com/roncoo/education/ProviderApplication.java b/spring-cloud-23/spring-cloud-provider-23/src/main/java/com/roncoo/education/ProviderApplication.java new file mode 100644 index 0000000..605349c --- /dev/null +++ b/spring-cloud-23/spring-cloud-provider-23/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-23/spring-cloud-provider-23/src/main/java/com/roncoo/education/controller/ApiUserController.java b/spring-cloud-23/spring-cloud-provider-23/src/main/java/com/roncoo/education/controller/ApiUserController.java new file mode 100644 index 0000000..215f0b4 --- /dev/null +++ b/spring-cloud-23/spring-cloud-provider-23/src/main/java/com/roncoo/education/controller/ApiUserController.java @@ -0,0 +1,64 @@ +package com.roncoo.education.controller; + +import java.io.File; +import java.io.IOException; +import java.util.Date; + +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.FileCopyUtils; +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 org.springframework.web.multipart.MultipartFile; + +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, HttpServletRequest request) throws InterruptedException { + //Thread.sleep(50000); + User user = new User(); + user.setId(id); + user.setName("无境1"); + user.setCreateTime(new Date()); + logger.info("请求接口返回:{}", user); + + System.out.println("通过zuul获取的token=" + request.getHeader("token")); + return user; + } + + @RequestMapping(value = "/upload") + public String upload(@RequestParam(value = "file") MultipartFile file) throws IOException { + File out = new File("D:/" + file.getOriginalFilename()); + FileCopyUtils.copy(file.getBytes(), out); + return "sucess"; + } + + +} diff --git a/spring-cloud-23/spring-cloud-provider-23/src/main/java/com/roncoo/education/controller/FeignApiUserController.java b/spring-cloud-23/spring-cloud-provider-23/src/main/java/com/roncoo/education/controller/FeignApiUserController.java new file mode 100644 index 0000000..4bb356b --- /dev/null +++ b/spring-cloud-23/spring-cloud-provider-23/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-23/spring-cloud-provider-23/src/main/resources/application.properties b/spring-cloud-23/spring-cloud-provider-23/src/main/resources/application.properties new file mode 100644 index 0000000..c4e5c1e --- /dev/null +++ b/spring-cloud-23/spring-cloud-provider-23/src/main/resources/application.properties @@ -0,0 +1,33 @@ +# 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@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.http.multipart.max-file-size=1000MB +spring.http.multipart.max-request-size=1000MB + diff --git a/spring-cloud-23/spring-cloud-provider-23/src/test/java/com/roncoo/education/ProviderApplicationTests.java b/spring-cloud-23/spring-cloud-provider-23/src/test/java/com/roncoo/education/ProviderApplicationTests.java new file mode 100644 index 0000000..e1d3cbb --- /dev/null +++ b/spring-cloud-23/spring-cloud-provider-23/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-23/spring-cloud-service-23/pom.xml b/spring-cloud-23/spring-cloud-service-23/pom.xml new file mode 100644 index 0000000..36eeb00 --- /dev/null +++ b/spring-cloud-23/spring-cloud-service-23/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + + + spring-cloud-service-23 + jar + + spring-cloud-service-23 + 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.cloud + spring-cloud-starter-hystrix-dashboard + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + true + + + + + diff --git a/spring-cloud-23/spring-cloud-service-23/src/main/java/com/roncoo/education/ServiceApplication.java b/spring-cloud-23/spring-cloud-service-23/src/main/java/com/roncoo/education/ServiceApplication.java new file mode 100644 index 0000000..f3c2a90 --- /dev/null +++ b/spring-cloud-23/spring-cloud-service-23/src/main/java/com/roncoo/education/ServiceApplication.java @@ -0,0 +1,16 @@ +package com.roncoo.education; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; +import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; + +@EnableHystrixDashboard +@EnableEurekaServer +@SpringBootApplication +public class ServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(ServiceApplication.class, args); + } +} diff --git a/spring-cloud-23/spring-cloud-service-23/src/main/resources/application.properties b/spring-cloud-23/spring-cloud-service-23/src/main/resources/application.properties new file mode 100644 index 0000000..35c17e9 --- /dev/null +++ b/spring-cloud-23/spring-cloud-service-23/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-23/spring-cloud-service-23/src/test/java/com/roncoo/education/ServiceApplicationTests.java b/spring-cloud-23/spring-cloud-service-23/src/test/java/com/roncoo/education/ServiceApplicationTests.java new file mode 100644 index 0000000..17cd49c --- /dev/null +++ b/spring-cloud-23/spring-cloud-service-23/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() { + } + +} diff --git a/spring-cloud-23/spring-cloud-turbine-23/pom.xml b/spring-cloud-23/spring-cloud-turbine-23/pom.xml new file mode 100644 index 0000000..5a7d7ba --- /dev/null +++ b/spring-cloud-23/spring-cloud-turbine-23/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + + com.roncoo.education + spring-cloud-23 + 0.0.1-SNAPSHOT + + spring-cloud-turbine-23 + + + + org.springframework.cloud + spring-cloud-starter-turbine + + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter-actuator + + + \ No newline at end of file diff --git a/spring-cloud-23/spring-cloud-turbine-23/src/main/java/com/roncoo/education/TurbineApplication.java b/spring-cloud-23/spring-cloud-turbine-23/src/main/java/com/roncoo/education/TurbineApplication.java new file mode 100644 index 0000000..10b39b2 --- /dev/null +++ b/spring-cloud-23/spring-cloud-turbine-23/src/main/java/com/roncoo/education/TurbineApplication.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.turbine.EnableTurbine; + +@EnableTurbine +@SpringBootApplication +public class TurbineApplication { + + public static void main(String[] args) { + SpringApplication.run(TurbineApplication.class, args); + } +} diff --git a/spring-cloud-23/spring-cloud-turbine-23/src/main/resources/application.properties b/spring-cloud-23/spring-cloud-turbine-23/src/main/resources/application.properties new file mode 100644 index 0000000..3ebe003 --- /dev/null +++ b/spring-cloud-23/spring-cloud-turbine-23/src/main/resources/application.properties @@ -0,0 +1,42 @@ +# server +server.port=9999 + +# spring +spring.application.name=spring-cloud-turbine + +# 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 + +# turbine(说明:注意必须为大写,因为eureka返回的值都是大写的) +#turbine.aggregator.clusterConfig=SPRING-CLOUD-CONSUMER +#turbine.app-config=spring-cloud-consumer + +#turbine.aggregator.clusterConfig=RONCOO +#turbine.app-config=spring-cloud-consumer,spring-cloud-consumer2 +#turbine.cluster-name-expression=metadata['cluster'] +#turbine.combine-host-port=true + +# turbine.aggregator.clusterConfig=RONCOO +turbine.app-config=spring-cloud-consumer,spring-cloud-consumer2 +turbine.cluster-name-expression='default'