diff --git a/spring-cloud-10-consumer/pom.xml b/spring-cloud-10-consumer/pom.xml
new file mode 100644
index 0000000..01f67e8
--- /dev/null
+++ b/spring-cloud-10-consumer/pom.xml
@@ -0,0 +1,92 @@
+
+
+ 4.0.0
+
+ com.roncoo.education
+ spring-cloud-10-consumer
+ 0.0.1-SNAPSHOT
+ jar
+
+ spring-cloud-10-consumer
+ spring-cloud project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.1.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ org.springframework.cloud
+ spring-cloud-starter-feign
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-devtools
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Dalston.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ 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-10-consumer/src/main/java/com/roncoo/education/ConsumerApplication.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/ConsumerApplication.java
new file mode 100644
index 0000000..f35b3ab
--- /dev/null
+++ b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/ConsumerApplication.java
@@ -0,0 +1,25 @@
+package com.roncoo.education;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+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;
+
+@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-10-consumer/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/configuration/Provider2Configuration.java
new file mode 100644
index 0000000..2c9da7e
--- /dev/null
+++ b/spring-cloud-10-consumer/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-10-consumer/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/configuration/ProviderConfiguration.java
new file mode 100644
index 0000000..426fa6b
--- /dev/null
+++ b/spring-cloud-10-consumer/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-10-consumer/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/configuration/RandomRuleConfig.java
new file mode 100644
index 0000000..1aa4cd4
--- /dev/null
+++ b/spring-cloud-10-consumer/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-10-consumer/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/configuration/RoncooCustomRule.java
new file mode 100644
index 0000000..498542b
--- /dev/null
+++ b/spring-cloud-10-consumer/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-10-consumer/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/configuration/RoundRobinRuleConfig.java
new file mode 100644
index 0000000..18beb71
--- /dev/null
+++ b/spring-cloud-10-consumer/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-10-consumer/src/main/java/com/roncoo/education/controller/FeignUserController.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/controller/FeignUserController.java
new file mode 100644
index 0000000..c0e8a20
--- /dev/null
+++ b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/controller/FeignUserController.java
@@ -0,0 +1,24 @@
+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.IUserBiz;
+
+/**
+ * @author wujing
+ */
+@RestController
+@RequestMapping(value = "/feign/user", method = RequestMethod.POST)
+public class FeignUserController {
+
+ @Autowired
+ private IUserBiz userBiz;
+
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+ public String get(@PathVariable(value = "id") int id) {
+ return userBiz.view(id);
+ }
+}
diff --git a/spring-cloud-10-consumer/src/main/java/com/roncoo/education/controller/UserController.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/controller/UserController.java
new file mode 100644
index 0000000..4e6223c
--- /dev/null
+++ b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/controller/UserController.java
@@ -0,0 +1,36 @@
+
+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;
+
+/**
+ * @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;
+
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+ public String get(@PathVariable(value = "id") int id) {
+ return restTemplate.getForObject(URL, String.class, id);
+ }
+
+ @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-10-consumer/src/main/java/com/roncoo/education/feign/IUserBiz.java b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/feign/IUserBiz.java
new file mode 100644
index 0000000..547c39c
--- /dev/null
+++ b/spring-cloud-10-consumer/src/main/java/com/roncoo/education/feign/IUserBiz.java
@@ -0,0 +1,17 @@
+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 = "spring-cloud-provider")
+public interface IUserBiz {
+ /**
+ * @return
+ */
+ @RequestMapping(value = "/api/user/{id}", method = RequestMethod.GET)
+ String view(@PathVariable(value = "id") int id);
+}
diff --git a/spring-cloud-10-consumer/src/main/resources/application.properties b/spring-cloud-10-consumer/src/main/resources/application.properties
new file mode 100644
index 0000000..c5b30bd
--- /dev/null
+++ b/spring-cloud-10-consumer/src/main/resources/application.properties
@@ -0,0 +1,36 @@
+# 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
+
diff --git a/spring-cloud-10-consumer/src/test/java/com/roncoo/education/ConsumerApplicationTests.java b/spring-cloud-10-consumer/src/test/java/com/roncoo/education/ConsumerApplicationTests.java
new file mode 100644
index 0000000..4b1701b
--- /dev/null
+++ b/spring-cloud-10-consumer/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-10-provider-01/pom.xml b/spring-cloud-10-provider-01/pom.xml
new file mode 100644
index 0000000..59e3244
--- /dev/null
+++ b/spring-cloud-10-provider-01/pom.xml
@@ -0,0 +1,88 @@
+
+
+ 4.0.0
+
+ com.roncoo.education
+ spring-cloud-10-provider-01
+ 0.0.1-SNAPSHOT
+ jar
+
+ spring-cloud-10-provider-01
+ spring-cloud project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.1.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ 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-devtools
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Dalston.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ 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-10-provider-01/src/main/java/com/roncoo/education/ProviderApplication.java b/spring-cloud-10-provider-01/src/main/java/com/roncoo/education/ProviderApplication.java
new file mode 100644
index 0000000..605349c
--- /dev/null
+++ b/spring-cloud-10-provider-01/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-10-provider-01/src/main/java/com/roncoo/education/bean/User.java b/spring-cloud-10-provider-01/src/main/java/com/roncoo/education/bean/User.java
new file mode 100644
index 0000000..0bf4fc1
--- /dev/null
+++ b/spring-cloud-10-provider-01/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-10-provider-01/src/main/java/com/roncoo/education/controller/ApiUserController.java b/spring-cloud-10-provider-01/src/main/java/com/roncoo/education/controller/ApiUserController.java
new file mode 100644
index 0000000..b619818
--- /dev/null
+++ b/spring-cloud-10-provider-01/src/main/java/com/roncoo/education/controller/ApiUserController.java
@@ -0,0 +1,32 @@
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+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 = "/{id}", method = RequestMethod.GET)
+ public User view(@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-10-provider-01/src/main/resources/application.properties b/spring-cloud-10-provider-01/src/main/resources/application.properties
new file mode 100644
index 0000000..8cfa2a5
--- /dev/null
+++ b/spring-cloud-10-provider-01/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-10-provider-01/src/test/java/com/roncoo/education/ProviderApplicationTests.java b/spring-cloud-10-provider-01/src/test/java/com/roncoo/education/ProviderApplicationTests.java
new file mode 100644
index 0000000..e1d3cbb
--- /dev/null
+++ b/spring-cloud-10-provider-01/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-10-provider-02/pom.xml b/spring-cloud-10-provider-02/pom.xml
new file mode 100644
index 0000000..56eceb4
--- /dev/null
+++ b/spring-cloud-10-provider-02/pom.xml
@@ -0,0 +1,88 @@
+
+
+ 4.0.0
+
+ com.roncoo.education
+ spring-cloud-10-provider-02
+ 0.0.1-SNAPSHOT
+ jar
+
+ spring-cloud-10-provider-02
+ spring-cloud project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.1.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ 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-devtools
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Dalston.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ 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-10-provider-02/src/main/java/com/roncoo/education/ProviderApplication.java b/spring-cloud-10-provider-02/src/main/java/com/roncoo/education/ProviderApplication.java
new file mode 100644
index 0000000..605349c
--- /dev/null
+++ b/spring-cloud-10-provider-02/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-10-provider-02/src/main/java/com/roncoo/education/bean/User.java b/spring-cloud-10-provider-02/src/main/java/com/roncoo/education/bean/User.java
new file mode 100644
index 0000000..0bf4fc1
--- /dev/null
+++ b/spring-cloud-10-provider-02/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-10-provider-02/src/main/java/com/roncoo/education/controller/ApiUserController.java b/spring-cloud-10-provider-02/src/main/java/com/roncoo/education/controller/ApiUserController.java
new file mode 100644
index 0000000..a2761a0
--- /dev/null
+++ b/spring-cloud-10-provider-02/src/main/java/com/roncoo/education/controller/ApiUserController.java
@@ -0,0 +1,32 @@
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+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 = "/{id}", method = RequestMethod.GET)
+ public User view(@PathVariable int id) {
+ User user = new User();
+ user.setId(id);
+ user.setName("无境2");
+ user.setCreateTime(new Date());
+ logger.info("请求接口返回:{}", user);
+ return user;
+ }
+
+}
diff --git a/spring-cloud-10-provider-02/src/main/resources/application.properties b/spring-cloud-10-provider-02/src/main/resources/application.properties
new file mode 100644
index 0000000..e7efe6a
--- /dev/null
+++ b/spring-cloud-10-provider-02/src/main/resources/application.properties
@@ -0,0 +1,29 @@
+# server
+server.port=7779
+
+# 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-10-provider-02/src/test/java/com/roncoo/education/ProviderApplicationTests.java b/spring-cloud-10-provider-02/src/test/java/com/roncoo/education/ProviderApplicationTests.java
new file mode 100644
index 0000000..e1d3cbb
--- /dev/null
+++ b/spring-cloud-10-provider-02/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-10-service/pom.xml b/spring-cloud-10-service/pom.xml
new file mode 100644
index 0000000..e6d593d
--- /dev/null
+++ b/spring-cloud-10-service/pom.xml
@@ -0,0 +1,88 @@
+
+
+ 4.0.0
+
+ com.roncoo.education
+ spring-cloud-10-service
+ 0.0.1-SNAPSHOT
+ jar
+
+ spring-cloud-10-service
+ spring-cloud project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.1.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka-server
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-devtools
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Dalston.BUILD-SNAPSHOT
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
+ 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-10-service/src/main/java/com/roncoo/education/ServiceApplication.java b/spring-cloud-10-service/src/main/java/com/roncoo/education/ServiceApplication.java
new file mode 100644
index 0000000..4a45de0
--- /dev/null
+++ b/spring-cloud-10-service/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-10-service/src/main/resources/application.properties b/spring-cloud-10-service/src/main/resources/application.properties
new file mode 100644
index 0000000..35c17e9
--- /dev/null
+++ b/spring-cloud-10-service/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-10-service/src/test/java/com/roncoo/education/ServiceApplicationTests.java b/spring-cloud-10-service/src/test/java/com/roncoo/education/ServiceApplicationTests.java
new file mode 100644
index 0000000..17cd49c
--- /dev/null
+++ b/spring-cloud-10-service/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() {
+ }
+
+}