本文是個人學習記錄,屬於半原創入門教程,僅供參觀,請勿轉載。
你期待已久的springcloud技術教程,已經幫你准備好啦>>>>>>
springcloud中文網:
SpringBoot底層架構走起>>>
首先打開Eclipse然后開啟Working Sets:
之后在package explorer里右鍵新建一個java working set:
在建好一個名叫SpringCloudDemo的working set之后,就可以在它里面建一個maven project:
接下來,create a simple project:
接下來簡單的填些信息group Id:com.changping.springcloud
看一下項目結構microservicecloud為父工程:
接下來導入pom的依賴,把它建成一個父級的pom文件,其它的模塊引入這個pom即可。
pom.xml詳情:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombok.version>1.16.18</lombok.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.9.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.31</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
接下來在maven項目上加一個maven model,作為它的子項目:
接下來給module命名,並勾上對勾:
接下來,不需要改什么,只是這次直接上jar包:
microservicecloud_api模塊導入pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.spingcloud</groupId> <artifactId>microservicecloud</artifactId><!-- 聲明父級依賴所在項目 --> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_api</artifactId><!--聲明模塊pom所在項目--> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> </dependencies> </project>
接着看一下當前項目結構:
接着看一下mircoservicecloud的pom.xml的變化:
之后建一個包(在建包時出現了):
去數據庫簡單的建一個user表:
之后就是回來eclipse寫一個類:
package com.changping.springcloud.entities; import java.io.Serializable; public class User implements Serializable{//轉變成序列化 private String userid; private String userpass; private String username; private String db_source;// 聲明用了什么數據庫 public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getUserpass() { return userpass; } public void setUserpass(String userpass) { this.userpass = userpass; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getDb_source() { return db_source; } public void setDb_source(String db_source) { this.db_source = db_source; } @Override public String toString() { return "User [userid=" + userid + ", userpass=" + userpass + ", username=" + username + ", db_source=" + db_source + "]"; } //有參構造 public User(String userid, String userpass, String username, String db_source) { super(); this.userid = userid; this.userpass = userpass; this.username = username; this.db_source = db_source; } //無參構造 public User() { super(); } }
看一下Outline:
不過由於項目經常變動,為了避免頻繁的增加字段,需要改一下代碼,使有參構造、無參構造、toString方法可以自動生成。
package com.changping.springcloud.entities; import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; @AllArgsConstructor//全參構造 @NoArgsConstructor//無參構造 @Data//由於導入lombok,所以自動生成get、set方法 @Accessors(chain=true) /**@Accessors作用: * 存取器,用於配置getter和setter方法的生成結果 * 三個屬性:fluent、chain、prefix * 1、fluent:流暢的,設置為true,getter和setter方法的方法名都是基礎屬性名,且setter方法返回當前對象 * 2、chain:鏈式的,設置為true,則setter方法返回當前對象 * 3、prefix:前綴,用於生成getter和setter方法的字段名會忽視指定前綴(遵守駝峰命名)*/ public class User implements Serializable{ private String userid; private String userpass; private String username; private String db_source;// 聲明用了什么數據庫 }
當然此時注解還不能生效,需要導maven的本地倉庫去找到jar包:
右鍵>打開方式:
接着去做這樣的事情(lombok譯:龍目島):
集成到你安裝的eclipse IDE上:
點擊Install/Updates即可完成安裝:
但是注解還是不會馬上生效,因為需要重啟eclipse,讓eclipse能夠加載這個插件:
這樣可以出現剛才沒有出現的一切方法:
接下來最好配一個單獨參數的構造方法:
最后代碼是這樣:
package com.changping.springcloud.entities; import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /**@Accessors作用: * 存取器,用於配置getter和setter方法的生成結果 * 三個屬性:fluent、chain、prefix * 1、fluent:流暢的,設置為true,getter和setter方法的方法名都是基礎屬性名,且setter方法返回當前對象 * 2、chain:鏈式的,設置為true,則setter方法返回當前對象 * 3、prefix:前綴,用於生成getter和setter方法的字段名會忽視指定前綴(遵守駝峰命名)*/ @SuppressWarnings("serial") @AllArgsConstructor//全參構造 @NoArgsConstructor//無參構造 @Data//由於導入lombok,所以自動生成get、set方法 @Accessors(chain=true) public class User implements Serializable{//為了實體類和數據庫可以形成映射,所以需要序列化 private String userid; private String userpass; private String username; private String db_source;//微服務服務架構下每個被發布的服務可以有不同的數據庫 public User(String username) { super(); this.username = username; } }
接下來讓micorservicecloud_api工程右鍵重新生成jar包——run as Maven clean:
生成jar包:
接下來執行maven install,結果出現錯誤:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building microservicecloud_api 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ microservicecloud_api --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ microservicecloud_api --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 2 source files to D:\workspace\springboot\microservicecloud\microservicecloud_api\target\classes [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /D:/workspace/springboot/microservicecloud/microservicecloud_api/src/main/java/com/changping/springcloud/entities/A.java:[8,17] 需要<標識符> [ERROR] /D:/workspace/springboot/microservicecloud/microservicecloud_api/src/main/java/com/changping/springcloud/entities/A.java:[10,2] 解析時已到達文件結尾 [INFO] 2 errors [INFO] ------------------------------------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.297 s [INFO] Finished at: 2020-04-07T20:42:46+08:00 [INFO] Final Memory: 17M/188M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project microservicecloud_api: Compilation failure: Compilation failure: [ERROR] /D:/workspace/springboot/microservicecloud/microservicecloud_api/src/main/java/com/changping/springcloud/entities/A.java:[8,17] 需要<標識符> [ERROR] /D:/workspace/springboot/microservicecloud/microservicecloud_api/src/main/java/com/changping/springcloud/entities/A.java:[10,2] 解析時已到達文件結尾 [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
編譯出錯了,不小心把用於測試的類寫錯了——A.java里有錯誤,已經改正。
重新clean、install后build success:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building microservicecloud_api 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ microservicecloud_api --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ microservicecloud_api --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to D:\workspace\springboot\microservicecloud\microservicecloud_api\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ microservicecloud_api --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ microservicecloud_api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ microservicecloud_api --- [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ microservicecloud_api --- [INFO] Building jar: D:\workspace\springboot\microservicecloud\microservicecloud_api\target\microservicecloud_api-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ microservicecloud_api --- [INFO] Downloading: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.pom [INFO] Downloaded: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.pom (3 KB at 1.4 KB/sec) [INFO] Downloading: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom [INFO] Downloaded: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom (2 KB at 2.4 KB/sec) [INFO] Downloading: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom [INFO] Downloaded: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom (5 KB at 11.3 KB/sec) [INFO] Downloading: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.jar [INFO] Downloading: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar [INFO] Downloaded: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.jar (226 KB at 321.5 KB/sec) [INFO] Downloaded: http://maven.aliyun.com/nexus/content/groups/public/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar (12 KB at 14.9 KB/sec) [INFO] Installing D:\workspace\springboot\microservicecloud\microservicecloud_api\target\microservicecloud_api-0.0.1-SNAPSHOT.jar to C:\Users\YZ\.m2\repository\com\changping\spingcloud\microservicecloud_api\0.0.1-SNAPSHOT\microservicecloud_api-0.0.1-SNAPSHOT.jar [INFO] Installing D:\workspace\springboot\microservicecloud\microservicecloud_api\pom.xml to C:\Users\YZ\.m2\repository\com\changping\spingcloud\microservicecloud_api\0.0.1-SNAPSHOT\microservicecloud_api-0.0.1-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 23.206 s [INFO] Finished at: 2020-04-07T21:43:05+08:00 [INFO] Final Memory: 31M/214M [INFO] ------------------------------------------------------------------------
這樣一來別的模塊就能調用這個jar包了。
接着新建一個module project項目作為提供者:
microservicecloud_provider_user_8001
當前結構:
父工程變化:
接着當前項目引入pom依賴:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId><!-- 父工程名 --> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_provider_user_8001</artifactId><!-- 當前項目名 --> <dependencies> <!-- 引入microservicecloud-api的jar包--> <dependency> <groupId>com.atguigu.springcloud</groupId> <artifactId>microservicecloud-api</artifactId> <version>${project.version}</version> </dependency> <!-- actuator監控信息完善 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 將微服務provider提供的服務注冊進eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
引入依賴之后,當前項目就可以使用api項目里的一切。
接着在當前項目src/main/resource里創建一個yml文件:
application.yml
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud_user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user8001 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
接下來配置mybatis.cnf.xml,首先在resource里建一個文件夾——mybatis,
接着在mybatis文件夾里建一個mybatis.cnf.xml文件:
mybatis.cnf.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="cacheEnabled" value="true" /><!--開啟二級緩存--> </settings> </configuration>
接着准備數據庫
數據庫名:db0325
表:db_user
db_user數據:
接下來建一個package:com.changping.springcloud.dao
接着建一個UserDao類:
UserDao.java
package com.changping.springcloud.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.changping.springcloud.entities.User; @Mapper public interface UserDao { public boolean insert_User(User user); public User findUser_by_UserId(String userid); public List<User> queryUser(); }
接着寫UserMapper.xml
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.changping.springcloud.dao.UserDao"> <select id="findUser_by_UserId" resultType="User" parameterType="String"> select * from db_user where userid=#{userid}; </select> <select id="queryUser" resultType="User"> select * from db_user; </select> <insert id="insert_User" parameterType="User"> insert into db_user (USERID,USERPASS,USERNAME,DB_SOURCE) values (#{USERID}, #{USERPASS}, #{USERNAME}, DATABASE() ) </insert> </mapper>
新建service包
創建UserServiceInf.java和它的實現類UserServiceImp.java:
UserServiceInf.java
package com.changping.springcloud.service; import java.util.List; import com.changping.springcloud.entities.User; public interface UserServiceInf { public boolean add(User user); public User get(String userid); public List<User> list(); }
UserServiceImp.java:
package com.changping.springcloud.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.changping.springcloud.dao.UserDao; import com.changping.springcloud.entities.User; @Service public class UserServiceImpl implements UserServiceInf{ @Autowired private UserDao userDao; @Override public boolean add(User user) { Boolean b = userDao.insert_User(user); return b; } @Override public User get(String userid) { User user = userDao.findUser_by_UserId(userid); return user; } @Override public List<User> list() { List<User> user_list = userDao.queryUser(); return user_list; } }
新建controller包:
創建一個UserController.java
package com.changping.springcloud.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; 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.RestController; import com.changping.springcloud.entities.User; import com.changping.springcloud.service.UserServiceInf; @RestController //自帶Responsbody注解功能 public class UserController { @Autowired private UserServiceInf userServiceInf; @RequestMapping(value="/user/add",method=RequestMethod.POST) public boolean add(@RequestBody User user) { boolean b = userServiceInf.add(user); return b; } @RequestMapping(value="/user/get/{id}",method=RequestMethod.GET) public User get(@PathVariable("id")String userId) { User user = userServiceInf.get(userId); return user; } @RequestMapping(value="/user/list",method=RequestMethod.GET) public List<User> list() { List<User> list_user = userServiceInf.list(); return list_user; } }
到這里基本的服務框架就搭建好了,接着需要寫一個springboot的啟動類:
UserProvider_8001_App.java
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class UserProvider_8001_App { public static void main(String[] args) { SpringApplication.run(UserProvider_8001_App.class, args); } }
右鍵>run as Spring Boot App:
接下來由內嵌的jetty啟動,服務會被發布到8001端口:
console:
10:13:42.230 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 10:13:42.235 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 10:13:42.236 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_provider_user_8001/target/classes/, file:/D:/workspace/springboot/microservicecloud/microservicecloud_api/target/classes/] 2020-04-08 10:13:44.391 INFO 15944 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@35d9a35: startup date [Wed Apr 08 10:13:44 CST 2020]; root of context hierarchy 2020-04-08 10:13:45.011 INFO 15944 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-08 10:13:45.127 INFO 15944 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$72adafd8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-08 10:13:47.241 INFO 15944 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888 2020-04-08 10:13:48.534 WARN 15944 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/microservicecloud_user/default": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect 2020-04-08 10:13:48.540 INFO 15944 --- [ restartedMain] c.c.springcloud.UserProvider_8001_App : No active profile set, falling back to default profiles: default 2020-04-08 10:13:48.577 INFO 15944 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@137b4d29: startup date [Wed Apr 08 10:13:48 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@35d9a35 2020-04-08 10:13:52.693 INFO 15944 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=d577ed13-7f01-3382-8514-f1b39ccf33c3 2020-04-08 10:13:52.745 INFO 15944 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-08 10:13:52.924 INFO 15944 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$88c0531c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-08 10:13:52.942 INFO 15944 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$5693acdb] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-08 10:13:53.139 INFO 15944 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$72adafd8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-08 10:13:53.548 INFO 15944 --- [ restartedMain] org.eclipse.jetty.util.log : Logging initialized @15082ms to org.eclipse.jetty.util.log.Slf4jLog 2020-04-08 10:13:57.246 INFO 15944 --- [ restartedMain] e.j.JettyEmbeddedServletContainerFactory : Server initialized with port: 8001 2020-04-08 10:13:57.250 INFO 15944 --- [ restartedMain] org.eclipse.jetty.server.Server : jetty-9.4.7.v20170914 2020-04-08 10:13:58.648 INFO 15944 --- [ restartedMain] org.eclipse.jetty.server.session : DefaultSessionIdManager workerName=node0 2020-04-08 10:13:58.648 INFO 15944 --- [ restartedMain] org.eclipse.jetty.server.session : No SessionScavenger set, using defaults 2020-04-08 10:13:58.651 INFO 15944 --- [ restartedMain] org.eclipse.jetty.server.session : Scavenging every 600000ms 2020-04-08 10:13:58.698 INFO 15944 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring embedded WebApplicationContext 2020-04-08 10:13:58.698 INFO 15944 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 10121 ms 2020-04-08 10:13:59.208 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-08 10:13:59.212 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-08 10:13:59.212 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-08 10:13:59.213 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-08 10:13:59.213 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-08 10:13:59.214 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-08 10:13:59.214 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestLoggingFilter' to: [/*] 2020-04-08 10:13:59.214 INFO 15944 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-08 10:13:59.252 INFO 15944 --- [ restartedMain] o.e.jetty.server.handler.ContextHandler : Started o.s.b.c.e.j.JettyEmbeddedWebAppContext@511d6885{/,[file:///C:/Users/YZ/AppData/Local/Temp/jetty-docbase.4833432217249137252.8001/],AVAILABLE} 2020-04-08 10:13:59.253 INFO 15944 --- [ restartedMain] org.eclipse.jetty.server.Server : Started @20790ms 2020-04-08 10:14:03.734 INFO 15944 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@137b4d29: startup date [Wed Apr 08 10:13:48 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@35d9a35 2020-04-08 10:14:03.999 INFO 15944 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/dept/add],methods=[POST]}" onto public boolean com.changping.springcloud.controller.UserController.add(com.changping.springcloud.entities.User) 2020-04-08 10:14:04.001 INFO 15944 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/dept/get/{id}],methods=[GET]}" onto public com.changping.springcloud.entities.User com.changping.springcloud.controller.UserController.get(java.lang.String) 2020-04-08 10:14:04.002 INFO 15944 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/dept/list],methods=[GET]}" onto public java.util.List<com.changping.springcloud.entities.User> com.changping.springcloud.controller.UserController.list() 2020-04-08 10:14:04.007 INFO 15944 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-08 10:14:04.007 INFO 15944 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-08 10:14:04.084 INFO 15944 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-08 10:14:04.084 INFO 15944 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-08 10:14:04.189 INFO 15944 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-08 10:14:05.459 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/resume || /resume.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-08 10:14:05.461 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.463 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.465 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.467 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.468 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/pause || /pause.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-08 10:14:05.469 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.472 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>) 2020-04-08 10:14:05.473 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/reset],methods=[POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.reset() 2020-04-08 10:14:05.474 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.478 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/archaius || /archaius.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.484 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2020-04-08 10:14:05.485 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2020-04-08 10:14:05.486 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.488 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2020-04-08 10:14:05.493 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2020-04-08 10:14:05.493 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.496 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2020-04-08 10:14:05.497 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.500 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/refresh || /refresh.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-08 10:14:05.501 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke() 2020-04-08 10:14:05.503 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2020-04-08 10:14:05.504 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.505 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/features || /features.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 10:14:05.506 INFO 15944 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2020-04-08 10:14:05.945 INFO 15944 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2020-04-08 10:14:07.233 WARN 15944 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-08 10:14:07.233 INFO 15944 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-08 10:14:07.246 WARN 15944 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-08 10:14:07.246 INFO 15944 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-08 10:14:07.484 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-08 10:14:07.486 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'dataSource' has been autodetected for JMX exposure 2020-04-08 10:14:07.499 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-08 10:14:07.502 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-08 10:14:07.504 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshEndpoint' has been autodetected for JMX exposure 2020-04-08 10:14:07.505 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'restartEndpoint' has been autodetected for JMX exposure 2020-04-08 10:14:07.507 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-08 10:14:07.511 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-08 10:14:07.534 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'restartEndpoint': registering with JMX server as MBean [org.springframework.cloud.context.restart:name=restartEndpoint,type=RestartEndpoint] 2020-04-08 10:14:07.551 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-08 10:14:07.572 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=137b4d29,type=ConfigurationPropertiesRebinder] 2020-04-08 10:14:07.584 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located MBean 'dataSource': registering with JMX server as MBean [com.alibaba.druid.pool:name=dataSource,type=DruidDataSource] 2020-04-08 10:14:07.604 INFO 15944 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.endpoint:name=refreshEndpoint,type=RefreshEndpoint] 2020-04-08 10:14:08.161 INFO 15944 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-08 10:14:08.281 INFO 15944 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-08 10:14:08.281 INFO 15944 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-08 10:14:08.321 INFO 15944 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 40 ms 2020-04-08 10:14:08.486 INFO 15944 --- [ restartedMain] o.e.jetty.server.AbstractConnector : Started ServerConnector@6909590{HTTP/1.1,[http/1.1]}{0.0.0.0:8001} 2020-04-08 10:14:08.487 INFO 15944 --- [ restartedMain] .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 8001 (http/1.1) 2020-04-08 10:14:08.504 INFO 15944 --- [ restartedMain] c.c.springcloud.UserProvider_8001_App : Started UserProvider_8001_App in 26.195 seconds (JVM running for 30.041) 2020-04-08 10:19:25.796 ERROR 15944 --- [tp1524513380-24] com.alibaba.druid.pool.DruidDataSource : testWhileIdle is true, validationQuery not set 2020-04-08 10:19:25.816 INFO 15944 --- [tp1524513380-24] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
如果看到藍色部分,說明jetty啟動完成,項目被正常發布在8001端口,
服務只能啟動一次,第二次端口會提示占用,每次需要執行以下命令,解除端口占用:
Microsoft Windows [版本 10.0.17134.950] (c) 2018 Microsoft Corporation。保留所有權利。 C:\Users\YZ>netstat -ano|findstr 8001 TCP 0.0.0.0:8001 0.0.0.0:0 LISTENING 20188 TCP [::]:8001 [::]:0 LISTENING 20188 C:\Users\YZ>taskkill /pid 20188 /f /t 成功: 已終止 PID 20188 (屬於 PID 12524 子進程)的進程。 C:\Users\YZ>
接下來是項目功能測試,由於訪問查詢用戶全部信息的方法上被定義成GET方式,所以可以通過瀏覽器地址欄來進行測試。
看到由json傳過來說明服務已經被發布:
接下來通過參數來測試:
后台報錯:
Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.changping.springcloud.dao.UserDao.findUser_by_UserId
通過在控制層debug發現原來是缺少一個注解:@PathVariable
@RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET) public User get(@PathVariable String userId) { User user = userServiceInf.get(userId); return user; }
不過還有一個錯誤是在UserMapper.xml
Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.changping.springcloud.dao.UserDao.findUser_by_UserId
結果發現id寫錯了,把id的by寫成了大寫,結果導致id與方法名對應不上。
debug時的特點是斷點無法從service層跳到Dao層。
排除問題后即可再次啟動項目通過主鍵查:
服務搭建完成,看一下當前結構:
接着需要一個消費者:
新建一個maven model:microservicecloud_consumer_user_80:
接着新建一個yml文件,僅僅指定服務器的端口號即可,如果不指定用jetty和端口,默認使用的是tomcat8080端口:
server: port: 80 #一定要有空格否則報錯
建一個包cfgbeans:
在包里寫個類——ConfigBean:
Apache
的
HttpClient
。不過此種方法使用起來太過繁瑣。
RestTemplate
。
package com.changping.springcloud.cfgbeans; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; /** * SpringBoot里定義了一個注解,Configuration * 它的作用代替了原本Spring里的ApplicationContext.xml * 凡是在開頭配有這個注解的類都可以看成是一個Spring的配置文件。 * (注解如果沒有被加載,說明需要force update) * 之前Spring中的ApplicationContext.xml里是這樣寫的,比如: * <bean id="userService" class="com.changping.mall.UerService"></bean>
* */ @Configuration public class ConfigBean { @Bean//這個注解等同於xml文件中的<bean>,用於spring容器初始化后的加載。 public RestTemplate getRestTemplate() { RestTemplate rt = new RestTemplate(); return rt; } }
接着新建controller包:
接着在包里寫一個類——UserController_Consumer,其中的RestTemplate:
spring框架提供的RestTemplate類可用於在應用中調用rest服務,它簡化了與http服務的通信方式,統一了RESTful的標准,封裝了http鏈接,
我們只需要傳入url及返回值類型即可。相較於之前常用的HttpClient,RestTemplate是一種更優雅的調用RESTful服務的方式。
UserController_Consumer.java
package com.changping.springcloud.controller; import java.util.List; 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.RestController; import org.springframework.web.client.RestTemplate; import com.changping.springcloud.entities.User; /** * REST_URL_PREFIX+"/user/add",user,Boolean.class * 請求的url....................,參數.,返回類型........ * */ @RestController public class UserController_Consumer {
private static final String REST_URL_PREFIX="http://localhost:8001";
@Autowired RestTemplate restTemplate; @RequestMapping(value="/consumer/user/add") public boolean add(User user) { //postForObject意思是以post請求方式來進行請求,請求服務的地址 return restTemplate.postForObject(REST_URL_PREFIX+"/user/add",user,Boolean.class); } @RequestMapping(value="/consumer/user/get/{id}") public User get(@PathVariable("id") String userId) { return restTemplate.getForObject(REST_URL_PREFIX+"/user/get/"+userId,User.class); } @SuppressWarnings("unchecked")//對異常的處理可有可無。 @RequestMapping(value="/consumer/user/list") public List<User> list() { return restTemplate.getForObject(REST_URL_PREFIX+"/user/list",List.class); } }
最后寫一個SpringBoot的啟動類——UserConsumer_80_App
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class UserConsumer_80_App { public static void main(String[] args) { SpringApplication.run(UserConsumer_80_App.class, args); } }
寫好之后可以看一下全部的結構:
消費者已經可以通過地址欄來訪問:
http://localhost:80/consumer/user/list
通過主鍵訪問的方式:
http://localhost:80/consumer/user/get/001
當然也可以在80端口進行add測試。
http://localhost:80/consumer/user/add?userid=004&userpass=123&username=Mickey
看到true就對了,不過,不能在8080端口進行測試,因為post方式不會與當前的方式進行匹配。
在此期間遇到了不少bug,其中一個bug是UserMapper.xml里的字段寫成大寫,結果與User里的屬性無法形成映射:
Caused by: org.apache.ibatis.reflection.ReflectionException:
There is no getter for property named 'USERID' in 'class com.changping.springcloud.entities.User'
這是具體的報錯信息,其中no getter把我誤導了好久,我還以為User類沒有get方法,其實是在Mapper中#{}中大寫了。
查看數據庫信息可以看到已經成功插入一條數據:
到此微服務的底層SpringBoot創建完畢>>>>>>
SpringCloud走起>>>
Spring Cloud 是什么:
Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智能路由,微代理,控制總線)。
分布式系統的協調導致了樣板模式, 使用Spring Cloud開發人員可以快速地支持實現這些模式的服務和應用程序。
他們將在任何分布式環境中運行良好,包括開發人員自己的筆記本電腦,裸機數據中心,以及Cloud Foundry等托管平台。
特點:
Spring Cloud專注於提供良好的開箱即用經驗的典型用例和可擴展性機制覆蓋。
-
分布式/版本化配置
-
服務注冊和發現
-
路由
-
service - to - service調用
-
負載均衡
-
斷路器
-
分布式消息傳遞
Eureka
先從Eureka開始,它和dubbo+zookeeper中的zookeeper功能一樣,都有服務 端和客戶端。
服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難,可以非常脆弱。
Netflix服務發現服務器和客戶端是Eureka。可以將服務器配置和部署為高可用性,每個服務器將注冊服務的狀態復制到其他服務器。
當客戶端注冊Eureka時,它提供關於自身的元數據,例如主機和端口,健康指示符URL,主頁等。
Eureka從屬於服務的每個實例接收心跳消息。如果心跳失敗超過可配置的時間表,則通常將該實例從注冊表中刪除。
示例eureka客戶端:
@Configuration @ComponentScan @EnableAutoConfiguration @EnableEurekaClient @RestController public class Application { @RequestMapping("/") public String home() { return "Hello world"; } public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }
(即完全正常的Spring Boot應用程序)。
在這個例子中,我們明確地使用@EnableEurekaClient
,但只有Eureka可用,你也可以使用@EnableDiscoveryClient
。
需要配置才能找到Eureka服務器。例:
application.yml
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
其中“defaultZone”是一個魔術字符串后備值,為任何不表示首選項的客戶端提供服務URL(即它是有用的默認值)。
從Environment
獲取的默認應用程序名稱(服務ID),
虛擬主機和非安全端口分別為${spring.application.name}
,${spring.application.name}
和${server.port}
。
@EnableEurekaClient
將應用程序同時進入一個Eureka“實例”(即注冊自己)和一個“客戶端”(即它可以查詢注冊表以查找其他服務)。
實例行為由eureka.instance.*
配置鍵驅動,但是如果您確保您的應用程序具有spring.application.name
(這是Eureka服務ID或VIP的默認值),
那么默認值將是正常的。
開始構建Eureka
回到SpringBoot項目上來:
首先在microservicecloud上右鍵new一個maven model
命名為:microservicecloud_eureka_7001
next
當前的項目結構:
每次新增一個組件,都有一個獨特的pom文件與之一 一對應:
現在添加Eureka的服務端的pom文件:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_eureka_7001</artifactId> <dependencies> <!--eureka-server服務端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
每次添加pom文件或者更改都需要更新項目。
接着在resource里添加application.yml文件。
application.yml:
server: port: 7001 eureka: instance: hostname: eureka7001.com #eureka服務端的實例名稱 client: register-with-eureka: false #false表示不向注冊中心注冊自己。 fetch-registry: false #false表示自己是注冊中心,本身職責是維護服務實例,並不需要去檢索服務 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
接下來建個包:
包名為:com.changping.springcloud
接下來在包里建一個SpringBoot啟動類:
命名為:Eureka_Server_7001_App
Eureka_Server_7001_App.java:
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer //開啟注冊中心,允許其它的服務進行注冊 public class Eureka_Server_7001_App { public static void main(String[] args) { SpringApplication.run(Eureka_Server_7001_App.class, args); } }
接着可以進行測試,看注冊中心是否可以根據端口號7001進行訪問:
console:
23:37:00.231 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 23:37:00.238 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 23:37:00.239 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_eureka_7001/target/classes/] 2020-04-08 23:37:02.821 INFO 13464 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2a39ff59: startup date [Wed Apr 08 23:37:02 CST 2020]; root of context hierarchy 2020-04-08 23:37:03.985 INFO 13464 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-08 23:37:04.181 INFO 13464 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$5cfb8fbe] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-08 23:37:05.718 INFO 13464 --- [ restartedMain] c.c.springcloud.Eureka_Server_7001_App : No active profile set, falling back to default profiles: default 2020-04-08 23:37:05.786 INFO 13464 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5824daf2: startup date [Wed Apr 08 23:37:05 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2a39ff59 2020-04-08 23:37:11.453 INFO 13464 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=c6c97a4a-5b0f-35e4-acd5-d22d08858df7 2020-04-08 23:37:11.504 INFO 13464 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-08 23:37:11.670 INFO 13464 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$730e3302] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-08 23:37:11.683 INFO 13464 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$5cfb8fbe] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-08 23:37:13.676 INFO 13464 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 7001 (http) 2020-04-08 23:37:13.735 INFO 13464 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-04-08 23:37:13.737 INFO 13464 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23 2020-04-08 23:37:14.461 INFO 13464 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-04-08 23:37:14.462 INFO 13464 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 8676 ms 2020-04-08 23:37:16.342 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-08 23:37:16.343 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-08 23:37:16.343 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-08 23:37:16.343 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-08 23:37:16.343 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-08 23:37:16.344 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestTraceFilter' to: [/*] 2020-04-08 23:37:16.344 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'servletContainer' to urls: [/eureka/*] 2020-04-08 23:37:16.344 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-08 23:37:16.344 INFO 13464 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-08 23:37:17.054 INFO 13464 --- [ost-startStop-1] c.s.j.s.i.a.WebApplicationImpl : Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM' 2020-04-08 23:37:17.321 INFO 13464 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-08 23:37:17.331 INFO 13464 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-08 23:37:17.658 INFO 13464 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-08 23:37:17.659 INFO 13464 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-08 23:37:20.745 INFO 13464 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5824daf2: startup date [Wed Apr 08 23:37:05 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2a39ff59 2020-04-08 23:37:21.143 INFO 13464 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-08 23:37:21.145 INFO 13464 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-08 23:37:21.155 INFO 13464 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.status(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-08 23:37:21.155 INFO 13464 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lastn],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.lastn(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-08 23:37:21.230 INFO 13464 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-08 23:37:21.230 INFO 13464 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-08 23:37:21.587 INFO 13464 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-08 23:37:23.697 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.699 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2020-04-08 23:37:23.699 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.701 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke() 2020-04-08 23:37:23.702 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/features || /features.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.703 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/archaius || /archaius.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.704 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2020-04-08 23:37:23.705 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/refresh || /refresh.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-08 23:37:23.708 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.711 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2020-04-08 23:37:23.712 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2020-04-08 23:37:23.713 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.714 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.716 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[GET]}" onto public org.springframework.http.ResponseEntity org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.getStatus() 2020-04-08 23:37:23.717 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[POST]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.setStatus(java.lang.String) 2020-04-08 23:37:23.718 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2020-04-08 23:37:23.719 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.722 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/resume || /resume.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-08 23:37:23.723 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.724 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/pause || /pause.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-08 23:37:23.725 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>) 2020-04-08 23:37:23.726 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/reset],methods=[POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.reset() 2020-04-08 23:37:23.727 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2020-04-08 23:37:23.728 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.729 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.731 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-08 23:37:23.732 INFO 13464 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2020-04-08 23:37:25.006 INFO 13464 --- [ restartedMain] o.s.ui.freemarker.SpringTemplateLoader : SpringTemplateLoader for FreeMarker: using resource loader [org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5824daf2: startup date [Wed Apr 08 23:37:05 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2a39ff59] and template loader path [classpath:/templates/] 2020-04-08 23:37:25.008 INFO 13464 --- [ restartedMain] o.s.w.s.v.f.FreeMarkerConfigurer : ClassTemplateLoader for Spring macros added to FreeMarker configuration 2020-04-08 23:37:25.292 INFO 13464 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2020-04-08 23:37:25.669 WARN 13464 --- [ restartedMain] o.s.c.n.a.ArchaiusAutoConfiguration : No spring.application.name found, defaulting to 'application' 2020-04-08 23:37:25.700 WARN 13464 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-08 23:37:25.700 INFO 13464 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-08 23:37:25.749 WARN 13464 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-08 23:37:25.749 INFO 13464 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-08 23:37:25.971 INFO 13464 --- [ restartedMain] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING 2020-04-08 23:37:26.163 INFO 13464 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1 2020-04-08 23:37:26.163 INFO 13464 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Client configured to neither register nor query for data. 2020-04-08 23:37:26.208 INFO 13464 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1586360246208 with initial instances count: 0 2020-04-08 23:37:26.494 INFO 13464 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initializing ... 2020-04-08 23:37:26.497 INFO 13464 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://eureka7003.com:7003/eureka/, http://eureka7002.com:7002/eureka/] 2020-04-08 23:37:28.219 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-08 23:37:28.219 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-08 23:37:28.219 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-08 23:37:28.219 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-08 23:37:28.703 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-08 23:37:28.703 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-08 23:37:28.703 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-08 23:37:28.703 INFO 13464 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-08 23:37:28.838 INFO 13464 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://eureka7003.com:7003/eureka/ 2020-04-08 23:37:28.839 INFO 13464 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://eureka7002.com:7002/eureka/ 2020-04-08 23:37:28.878 INFO 13464 --- [ restartedMain] c.n.e.registry.AbstractInstanceRegistry : Finished initializing remote region registries. All known remote regions: [] 2020-04-08 23:37:28.878 INFO 13464 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initialized 2020-04-08 23:37:29.075 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-08 23:37:29.094 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-08 23:37:29.097 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-08 23:37:29.098 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshEndpoint' has been autodetected for JMX exposure 2020-04-08 23:37:29.099 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'restartEndpoint' has been autodetected for JMX exposure 2020-04-08 23:37:29.101 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'serviceRegistryEndpoint' has been autodetected for JMX exposure 2020-04-08 23:37:29.103 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-08 23:37:29.108 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-08 23:37:29.157 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'restartEndpoint': registering with JMX server as MBean [org.springframework.cloud.context.restart:name=restartEndpoint,type=RestartEndpoint] 2020-04-08 23:37:29.178 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'serviceRegistryEndpoint': registering with JMX server as MBean [org.springframework.cloud.client.serviceregistry.endpoint:name=serviceRegistryEndpoint,type=ServiceRegistryEndpoint] 2020-04-08 23:37:29.198 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-08 23:37:29.225 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=5824daf2,type=ConfigurationPropertiesRebinder] 2020-04-08 23:37:29.240 INFO 13464 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.endpoint:name=refreshEndpoint,type=RefreshEndpoint] 2020-04-08 23:37:30.034 INFO 13464 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-08 23:37:30.035 INFO 13464 --- [ restartedMain] o.s.c.n.e.s.EurekaServiceRegistry : Registering application unknown with eureka with status UP 2020-04-08 23:37:30.187 INFO 13464 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Setting the eureka configuration.. 2020-04-08 23:37:30.188 INFO 13464 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Eureka data center value eureka.datacenter is not set, defaulting to default 2020-04-08 23:37:30.188 INFO 13464 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Eureka environment value eureka.environment is not set, defaulting to test 2020-04-08 23:37:30.271 INFO 13464 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false 2020-04-08 23:37:30.272 INFO 13464 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context 2020-04-08 23:37:30.273 INFO 13464 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Got 1 instances from neighboring DS node 2020-04-08 23:37:30.275 INFO 13464 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Renew threshold is: 1 2020-04-08 23:37:30.275 INFO 13464 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP 2020-04-08 23:37:30.358 INFO 13464 --- [ Thread-17] e.s.EurekaServerInitializerConfiguration : Started Eureka Server 2020-04-08 23:37:30.601 INFO 13464 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 7001 (http) 2020-04-08 23:37:30.602 INFO 13464 --- [ restartedMain] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 7001 2020-04-08 23:37:30.613 INFO 13464 --- [ restartedMain] c.c.springcloud.Eureka_Server_7001_App : Started Eureka_Server_7001_App in 30.305 seconds (JVM running for 32.633) 2020-04-08 23:38:30.279 INFO 13464 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms
接着去瀏覽器訪問:
http://localhost:7001/
至此Eureka服務端搭建完成。
接下來需要將已經發布的服務注冊到Eureka注冊中心,可以注冊的前提是將之前的服務變成客戶端,
想要完成這個功能,需要添加兩個注解:
<!--將微服務provider提供的服務注冊進eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
所以接着可以將8001服務提供者注冊到注冊中心。
不過僅僅有依賴文件還不夠,還需要在服務提供者的yml里進行配置,寫上注冊中心的url、端口號,所以暫時需要將yml改一下:
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud_user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://localhost:7001/eureka
第三點需要在8001服務的啟動類上注明它是客戶端:(由於沒寫這個注解,我浪費了一個小時)
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class UserProvider_8001_App { public static void main(String[] args) { SpringApplication.run(UserProvider_8001_App.class, args); } }
接下來重新啟動8001端口服務,然后重新訪問注冊中心:
記住最好先啟動注冊中心,然后再啟動服務,即先啟動7001再啟動8001。
最后效果如下,可以顯示應用的名字(微服務名,在yml中定義):
至此服務注冊到注冊中心完成。
不過再過一會只要刷新這個頁面,那么注冊中心會發生變化:
紅色提示信息:
emergency! eureka may be incorrectly claiming instances are up when they're not.
renewals are lesser than threshold and hence the instances are not being expired just to be safe.
緊急! 尤里卡(Eureka)可能錯誤地聲稱實例未啟動。續訂小於閾值,因此,為了安全起見,實例不會過期。
不過這條信息可以忽略。
只是需要給實例一個別名,用於顯示在注冊中心中的status更具有辨識度。
所以需要改一下8001服務的yml:
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud_user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://localhost:7001/eureka instance: instance-id: microservicecloud_user_8001 prefer-ip-address: true #訪問路徑可以顯示IP地址
可以比較一下前后的區別:
之后鼠標落在url上將會產生IP的提示:
接下來需要為該服務提供可供訪問的描述信息,用於描述該服務的功能:
首先需要在8001的pom上實現監控的功能:
<!-- actuator監控信息完善 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
並且在父工程里添加依賴信息,需要明白一點父類工程將會同步到所有的子模塊中:
<!-- 提供此部分后,eureka注冊中心里點擊status即可顯示當前服務的描述 -->
<build>
<finalName>microservicecloud</finalName>
<resources>
<resource>
<!--所有子模塊共享此資源后,將會讀取自身的資源文件yml-->
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit><!--一旦識別出$將會動態解析成json,並用於info顯示-->
</delimiters>
</configuration>
</plugin>
</plugins>
</build>
當這些准備完善之后即可啟動項目,順序是先啟動注冊中心7001,再啟動服務項目8001。
接着訪問瀏覽器 http://localhost:7001/ 可以看到注冊中心:
當點擊status時可以跳轉到頁面:
http://192.168.139.1:8001/info
可以看到:
當前並沒有提示信息:
接下來需要為服務添加顯示的信息,還是在服務提供者8001項目的yml文件里:
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud_user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://localhost:7001/eureka instance: instance-id: microservicecloud_user_8001 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
如藍色字所示:這就是可供訪問的信息,添加保存好后,可以重新啟動8001項目,再次訪問status信息。
控制台可以點擊顯示器圖標查看注冊中心、服務提供者的啟動狀態:
啟動完成,去7001監控中心再次點擊status,如圖所示已經可以看到以json格式顯示的info信息,即在yml里定義的信息:
在info里定義了應用信息、公司信息、服務信息等都可以直觀的看到,方便服務管理與維護。
Eureka自我保護機制
https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication
Eureka客戶端嘗試與同一區域中的Eureka Server通信。如果在與服務器通信時遇到問題,或者該服務器不存在於同一區域中,則客戶端將故障轉移到其他區域中的服務器。
服務器開始接收流量后,在服務器上執行的所有操作都將復制到服務器知道的所有對等節點。如果某個操作由於某種原因失敗,那么該信息將在下一個檢測信號上進行協調,該檢測信號也將在服務器之間復制。
正常情況下,Eureka如果超過90秒沒有收到某個服務的心跳,那么它將會注銷這個實例。
當Eureka服務器啟動時,它將嘗試從相鄰節點獲取所有實例注冊表信息。如果從節點獲取信息有問題,則服務器會在放棄之前嘗試所有對等節點。如果服務器能夠成功獲取所有實例,則它將基於該信息設置應接收的續訂閾值。如果有任何時間,續訂降到為此值配置的百分比以下(15分鍾內低於85%),服務器將停止實例過期以保護當前實例注冊表信息。
在Netflix中,以上保護措施稱為自我保護模式,主要用於在一組客戶端和Eureka Server之間存在網絡分區的情況下的保護措施。在這些情況下,服務器嘗試保護它已經擁有的信息。在大規模中斷的情況下,可能存在一些場景,這可能會導致客戶端獲取不再存在的實例。客戶端必須確保它們對eureka服務器具有彈性,可以返回不存在或無響應的實例。在這些情況下,最好的保護是快速超時並嘗試其他服務器。
在這種情況下,如果服務器無法從相鄰節點獲取注冊表信息,它將等待幾分鍾(5分鍾),以便客戶端可以注冊其信息。服務器通過將流量僅偏向一組實例並導致容量問題,努力不向客戶端提供部分信息。
Eureka服務器使用此處所述的Eureka客戶端與服務器之間使用的相同機制相互通信。
另外值得注意的是,可以在服務器上調整多種配置,包括在需要時進行服務器之間的通信。
對等之間的網絡中斷期間會發生什么?
如果對等點之間發生網絡中斷,則可能發生以下情況
對等方之間的心跳復制可能會失敗,並且服務器會檢測到這種情況,並進入保護當前狀態的自保留模式。
注冊可能發生在孤立的服務器上,某些客戶端可能會反映新的注冊,而其他客戶端則可能沒有。
網絡連接恢復到穩定狀態后,情況會自動更正。當對等方能夠正常通信時,注冊信息會自動傳輸到不具有它們的服務器。
最重要的是,在網絡中斷期間,服務器會嘗試盡可能地具有彈性,但是在此期間,客戶端可能會對服務器有不同的看法。
如果想要禁用自我保護機制:(不過並不推薦禁用自我保護機制,這里僅提供禁用的方法)
server: port: 7001 eureka: server: enable-self-preservation: false instance: hostname: eureka7001.com #eureka服務端的實例名稱 client: register-with-eureka: false #false表示不向注冊中心注冊自己。 fetch-registry: false #false表示自己是注冊中心,本身職責是維護服務實例,並不需要去檢索服務 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
服務提供者對外暴露服務,注冊中心Eureka發現服務:
首先在8001服務提供者的contrller里暴露服務。
Eureka服務注冊與發現
服務注冊我們有了,現在要服務提供者提供發現功能,發現功能就是將提供者的信息打印出來,供別人查看:
首先來到8001服務提供者添加一部分代碼,首先添加一個注解:
package com.changping.springcloud.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; 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.RestController; import com.changping.springcloud.entities.User; import com.changping.springcloud.service.UserServiceInf; @RestController //自帶Responsbody注解功能 public class UserController { @Autowired private UserServiceInf userServiceInf; @RequestMapping(value="/user/add",method=RequestMethod.POST) public boolean add(@RequestBody User user) { boolean b = userServiceInf.add(user); return b; } @RequestMapping(value="/user/get/{id}",method=RequestMethod.GET) public User get(@PathVariable("id")String userId) { User user = userServiceInf.get(userId); return user; } @RequestMapping(value="/user/list",method=RequestMethod.GET) public List<User> list() { List<User> list_user = userServiceInf.list(); return list_user; }
//這里提供一個client用於返回服務提供者信息,這個方法的作用就是如此 @Autowired private DiscoveryClient client; @RequestMapping(value = "/user/discovery", method = RequestMethod.GET) public Object discovery() { List<String> list = client.getServices();//獲得全部的服務名即啟動類上帶有@EnableDiscoveryClient的服務都會被發現 System.out.println("**********" + list); List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD_USER");//注冊中心上的application for (ServiceInstance element : srvList) { System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t" + element.getUri()); } return this.client; } }
接着在8001啟動類上添加一個注解:
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient //服務發現 public class UserProvider_8001_App { public static void main(String[] args) { SpringApplication.run(UserProvider_8001_App.class, args); } }
好了現在可以測試以下服務發現:
首先啟動7001注冊中心、再啟動8001服務提供者:
訪問這個路徑,即可獲得client對象的詳細信息,或者說這個對象里有一個toString方法,
controller里加這個方法return this.client,返回的信息就是這些,而System.out.println打印出來的只是讓自己看一眼。
http://localhost:8001/user/discovery
這是直接在服務提供者上進行測試,當然這最終是要給消費者使用,所以接下來要在消費者上進行測試:
來到消費者80號端口的控制層;
給控制層加一些代碼:
package com.changping.springcloud.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import com.changping.springcloud.entities.User; /** * REST_URL_PREFIX+"/user/add",user,Boolean.class * 請求的url....................,參數.,返回類型........ * */ @RestController public class UserController_Consumer { private static final String REST_URL_PREFIX="http://localhost:8001"; @Autowired RestTemplate restTemplate; @RequestMapping(value="/consumer/user/add") public boolean add(User user) { //postForObject意思是以post請求方式來進行請求,請求服務的地址 return restTemplate.postForObject(REST_URL_PREFIX+"/user/add",user,Boolean.class); } @RequestMapping(value="/consumer/user/get/{id}") public User get(@PathVariable("id") String userId) { return restTemplate.getForObject(REST_URL_PREFIX+"/user/get/"+userId,User.class); } @SuppressWarnings("unchecked")//對異常的處理可有可無。 @RequestMapping(value="/consumer/user/list") public List<User> list() { return restTemplate.getForObject(REST_URL_PREFIX+"/user/list",List.class); } //此處增加一個方法,用於訪問服務提供者提供的發現 @RequestMapping(value="/consumer/user/discovery")//提供一個路徑,訪問這個路徑相當於訪問8001服務提供者。 public Object discovery() { return restTemplate.getForObject(REST_URL_PREFIX+"/user/discovery",DiscoveryClient.class); } }
接下來啟動80端口:
啟動時可以看到一種超時的異常:7001報出(不過也可以正常訪問)
00:41:12.943 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 00:41:12.948 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 00:41:12.949 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_eureka_7001/target/classes/] 2020-04-12 00:41:14.789 INFO 18804 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@690bfb4d: startup date [Sun Apr 12 00:41:14 CST 2020]; root of context hierarchy 2020-04-12 00:41:15.486 INFO 18804 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-12 00:41:15.678 INFO 18804 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$fb56615f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-12 00:41:17.310 INFO 18804 --- [ restartedMain] c.c.springcloud.Eureka_Server_7001_App : No active profile set, falling back to default profiles: default 2020-04-12 00:41:17.343 INFO 18804 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@758623a3: startup date [Sun Apr 12 00:41:17 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@690bfb4d 2020-04-12 00:41:20.846 INFO 18804 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=c6c97a4a-5b0f-35e4-acd5-d22d08858df7 2020-04-12 00:41:20.871 INFO 18804 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-12 00:41:20.988 INFO 18804 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$116904a3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-12 00:41:21.001 INFO 18804 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$fb56615f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-12 00:41:23.321 INFO 18804 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 7001 (http) 2020-04-12 00:41:23.374 INFO 18804 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-04-12 00:41:23.376 INFO 18804 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23 2020-04-12 00:41:24.716 INFO 18804 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-04-12 00:41:24.717 INFO 18804 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 7374 ms 2020-04-12 00:41:27.095 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-12 00:41:27.096 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-12 00:41:27.096 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-12 00:41:27.097 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-12 00:41:27.097 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-12 00:41:27.097 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestTraceFilter' to: [/*] 2020-04-12 00:41:27.098 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'servletContainer' to urls: [/eureka/*] 2020-04-12 00:41:27.098 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-12 00:41:27.098 INFO 18804 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-12 00:41:27.744 INFO 18804 --- [ost-startStop-1] c.s.j.s.i.a.WebApplicationImpl : Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM' 2020-04-12 00:41:27.941 INFO 18804 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-12 00:41:27.945 INFO 18804 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-12 00:41:28.211 INFO 18804 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-12 00:41:28.212 INFO 18804 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-12 00:41:36.172 INFO 18804 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@758623a3: startup date [Sun Apr 12 00:41:17 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@690bfb4d 2020-04-12 00:41:37.700 INFO 18804 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-12 00:41:37.724 INFO 18804 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-12 00:41:37.773 INFO 18804 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.status(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-12 00:41:37.774 INFO 18804 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lastn],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.lastn(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-12 00:41:38.146 INFO 18804 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 00:41:38.149 INFO 18804 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 00:41:38.394 INFO 18804 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 00:41:45.680 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[POST]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.setStatus(java.lang.String) 2020-04-12 00:41:45.686 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[GET]}" onto public org.springframework.http.ResponseEntity org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.getStatus() 2020-04-12 00:41:45.688 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2020-04-12 00:41:45.689 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.735 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.759 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.760 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2020-04-12 00:41:45.764 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/resume || /resume.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-12 00:41:45.766 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.770 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.773 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/pause || /pause.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-12 00:41:45.774 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2020-04-12 00:41:45.775 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>) 2020-04-12 00:41:45.776 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/reset],methods=[POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.reset() 2020-04-12 00:41:45.783 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2020-04-12 00:41:45.784 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.789 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/refresh || /refresh.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-12 00:41:45.804 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2020-04-12 00:41:45.808 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2020-04-12 00:41:45.812 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.815 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.821 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/archaius || /archaius.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:45.825 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2020-04-12 00:41:46.071 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke() 2020-04-12 00:41:46.077 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/features || /features.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:46.079 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:46.080 INFO 18804 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 00:41:46.882 INFO 18804 --- [ restartedMain] o.s.ui.freemarker.SpringTemplateLoader : SpringTemplateLoader for FreeMarker: using resource loader [org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@758623a3: startup date [Sun Apr 12 00:41:17 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@690bfb4d] and template loader path [classpath:/templates/] 2020-04-12 00:41:46.885 INFO 18804 --- [ restartedMain] o.s.w.s.v.f.FreeMarkerConfigurer : ClassTemplateLoader for Spring macros added to FreeMarker configuration 2020-04-12 00:41:47.790 INFO 18804 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2020-04-12 00:41:48.223 WARN 18804 --- [ restartedMain] o.s.c.n.a.ArchaiusAutoConfiguration : No spring.application.name found, defaulting to 'application' 2020-04-12 00:41:49.682 WARN 18804 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-12 00:41:49.682 INFO 18804 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-12 00:41:49.743 WARN 18804 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-12 00:41:49.744 INFO 18804 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-12 00:41:50.192 INFO 18804 --- [ restartedMain] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING 2020-04-12 00:41:50.525 INFO 18804 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1 2020-04-12 00:41:50.525 INFO 18804 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Client configured to neither register nor query for data. 2020-04-12 00:41:50.558 INFO 18804 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1586623310558 with initial instances count: 0 2020-04-12 00:41:51.277 INFO 18804 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initializing ... 2020-04-12 00:41:51.282 INFO 18804 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://localhost#eureka7001.com:7001/eureka/] 2020-04-12 00:41:52.741 INFO 18804 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-12 00:41:52.742 INFO 18804 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-12 00:41:52.742 INFO 18804 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-12 00:41:52.742 INFO 18804 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-12 00:41:54.302 INFO 18804 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://localhost#eureka7001.com:7001/eureka/ 2020-04-12 00:41:54.317 INFO 18804 --- [ restartedMain] c.n.e.registry.AbstractInstanceRegistry : Finished initializing remote region registries. All known remote regions: [] 2020-04-12 00:41:54.318 INFO 18804 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initialized 2020-04-12 00:41:55.057 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-12 00:41:55.085 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-12 00:41:55.179 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-12 00:41:55.181 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshEndpoint' has been autodetected for JMX exposure 2020-04-12 00:41:55.183 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'restartEndpoint' has been autodetected for JMX exposure 2020-04-12 00:41:55.186 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'serviceRegistryEndpoint' has been autodetected for JMX exposure 2020-04-12 00:41:55.188 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-12 00:41:55.195 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-12 00:41:55.325 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'restartEndpoint': registering with JMX server as MBean [org.springframework.cloud.context.restart:name=restartEndpoint,type=RestartEndpoint] 2020-04-12 00:41:55.397 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'serviceRegistryEndpoint': registering with JMX server as MBean [org.springframework.cloud.client.serviceregistry.endpoint:name=serviceRegistryEndpoint,type=ServiceRegistryEndpoint] 2020-04-12 00:41:55.521 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-12 00:41:55.549 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=758623a3,type=ConfigurationPropertiesRebinder] 2020-04-12 00:41:55.749 INFO 18804 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.endpoint:name=refreshEndpoint,type=RefreshEndpoint] 2020-04-12 00:41:57.798 INFO 18804 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-12 00:41:57.825 INFO 18804 --- [ restartedMain] o.s.c.n.e.s.EurekaServiceRegistry : Registering application unknown with eureka with status UP 2020-04-12 00:41:58.751 INFO 18804 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Setting the eureka configuration.. 2020-04-12 00:41:58.752 INFO 18804 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Eureka data center value eureka.datacenter is not set, defaulting to default 2020-04-12 00:41:58.752 INFO 18804 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Eureka environment value eureka.environment is not set, defaulting to test 2020-04-12 00:41:58.790 INFO 18804 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false 2020-04-12 00:41:58.792 INFO 18804 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context 2020-04-12 00:41:58.793 INFO 18804 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Got 1 instances from neighboring DS node 2020-04-12 00:41:58.793 INFO 18804 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Renew threshold is: 1 2020-04-12 00:41:58.794 INFO 18804 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP 2020-04-12 00:41:58.869 INFO 18804 --- [ Thread-17] e.s.EurekaServerInitializerConfiguration : Started Eureka Server 2020-04-12 00:41:59.262 INFO 18804 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 7001 (http) 2020-04-12 00:41:59.263 INFO 18804 --- [ restartedMain] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 7001 2020-04-12 00:41:59.277 INFO 18804 --- [ restartedMain] c.c.springcloud.Eureka_Server_7001_App : Started Eureka_Server_7001_App in 46.275 seconds (JVM running for 54.195) 2020-04-12 00:42:33.191 INFO 18804 --- [io-7001-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-12 00:42:33.192 INFO 18804 --- [io-7001-exec-10] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-12 00:42:33.254 INFO 18804 --- [io-7001-exec-10] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 62 ms 2020-04-12 00:42:35.111 INFO 18804 --- [nio-7001-exec-9] c.n.e.registry.AbstractInstanceRegistry : Registered instance MICROSERVICECLOUD_USER/microservicecloud_user_8001 with status UP (replication=false) 2020-04-12 00:42:36.963 ERROR 18804 --- [get_localhost-2] c.n.e.cluster.ReplicationTaskProcessor : Network level connection to peer localhost; retrying after delay com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:80 timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.6.2.jar:1.6.2] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to localhost:80 timed out at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 10 common frames omitted //以下這些是訪問的時候出現,大概可以了解上面的異常不會有太大的影響 2020-04-12 00:42:37.706 ERROR 18804 --- [get_localhost-5] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:42:37.706 WARN 18804 --- [get_localhost-5] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-5 due to permanent error 2020-04-12 00:42:58.796 INFO 18804 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 00:43:04.200 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:43:04.200 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:43:34.225 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:43:34.225 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:43:58.797 INFO 18804 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-12 00:44:04.244 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:44:04.244 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:44:34.257 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:44:34.257 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:44:58.797 INFO 18804 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 00:45:04.274 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:45:04.275 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:45:34.297 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:45:34.297 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:45:58.798 INFO 18804 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 00:46:04.321 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:46:04.322 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:46:34.318 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:46:34.318 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:46:58.798 INFO 18804 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 00:47:04.343 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:47:04.343 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:47:34.355 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:47:34.355 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error 2020-04-12 00:47:58.799 INFO 18804 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 00:48:04.379 ERROR 18804 --- [et_localhost-15] c.n.e.cluster.ReplicationTaskProcessor : Batch update failure with HTTP status code 404; discarding 1 replication tasks 2020-04-12 00:48:04.380 WARN 18804 --- [et_localhost-15] c.n.eureka.util.batcher.TaskExecutors : Discarding 1 tasks of TaskBatchingWorker-target_localhost-15 due to permanent error
然后在地址欄里訪問路徑:
http://localhost/consumer/user/discovery
http://localhost/consumer/user/list
http://localhost/consumer/user/get/001
可以看到consumer里也可以訪問到這個client即服務提供者的信息了。
SpringCloud_Eureka集群配置:
注:這句話是我在配置完集群的時候說的,因為就是從這個時候出現了無法處理的異常,無法通過consumer來對數據和discovery進行訪問,
其它的都正常,特此去掉集群的配置,回到此處重來一遍。
配置集群的時候異常會很多,尤其是配置三個注冊中心的時候,就會發現上面的訪問路徑不再有用,
我現在是一夜回到解放前,因為我要重新配置一下集群,主要為了縮小查找異常的范圍,這到底是怎么回事,我遇到了大麻煩,未知的錯誤、
還有內存也不夠,真是有些苦惱。
再重來一遍之前我已經做好了注釋,該刪除的也刪除了,現在重新配置。————2020/4/12/0:59
集群是在不同的服務器上配置相同的服務。很多網址的背后都有上萬台服務器去提供服務。
常用的集群有tomcat集群、redis集群、zookeeper集群。
所以這里需要考慮到Eureka和Zookeeper的對比。略
那么現在需要搭建Eureka集群,由於現在Eureka的注冊中心只有一個7001,太單薄了,為了滿足它的高可用,需要多配置幾個。
那么就來添加一個7002注冊中心:
首先在父工程microservicecloud上右鍵,建一個Maven Model
項目名就叫:microservicecloud_eureka_7002
next
建法和之前一樣,可以說7002和7001的功能一樣,理論上可以直接復制。
不過還是一步一步的建吧,還需要像上面那樣建一個7003注冊中心。
當前項目結構:
那么和之前的7001的配置方法一樣,需要接着配置7002、7003。
首先是pom文件里依賴可以從7001里進行拷貝,三者依賴相同,這里僅以7002為例:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_eureka_7002</artifactId> <!--依賴信息--> <dependencies> <!--eureka-server服務端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
接下來是主啟動類,只是名字不一樣,所以直接從7001的包開始拷貝,然后將700q啟動類改成7002即可:
接下來需要配置application.yml。之前的是單機模式hostname可以寫成localhost,但是現在不同了,現在有三個所以需要改一下——做一個域名映射:
三個注冊中心7001、7002、7003的yml文件都需要改:
7001:
server: port: 7001 eureka: instance: hostname: eureka7001.com #eureka服務端的實例名稱,當只有一台機時寫localhost也可以。 client: register-with-eureka: false #false表示不向注冊中心注冊自己。 fetch-registry: false #false表示自己是注冊中心,本身職責是維護服務實例,並不需要去檢索服務 service-url: #集群的配置,除了當前的hostname,其它的都得配置。 defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #設置與Eureka Server交互的地址查詢服務和注冊服務都需要依賴這個地址(單機)。
7002:
server: port: 7002 eureka: instance: hostname: eureka7002.com #eureka服務端的實例名稱,當只有一台機時寫localhost也可以 client: register-with-eureka: false fetch-registry: false service-url: #集群的配置,除了當前的hostname,其它的都得配置。 defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/
7003:
server: port: 7003 eureka: instance: hostname: eureka7003.com #eureka服務端的實例名稱,當只有一台機時寫localhost也可以 client: register-with-eureka: false fetch-registry: false service-url: #集群的配置,除了當前的hostname,其它的都得配置。 defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
現在三個注冊中心都准備好了,接下來就該准備8001服務提供者,因為需要把服務提供者同時注冊到三個注冊中心。
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud_user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_8001ZZZ prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
現在就可以去驗證了,首先是啟動三個注冊中心,最后啟動8001服務提供者。
不過我的電腦已經經受不住三個注冊中心同時啟動了,我只啟動7001、7002和8001吧。
遭遇未知問題,此處略過幾個小時.....
前面的話,我發現無論啟動多少次到8001都無法正常啟動。
現在我就不單單啟動7001、7002了,7003也可以啟動。服務啟動時7001、2、3都沒有問題但是啟動8001時出現超時現象:
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.5.9.RELEASE.jar:1.5.9.RELEASE] Caused by: java.net.UnknownHostException: eureka7003.com at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_172] at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_172] at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_172] at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:162) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 74 common frames omitted 2020-04-11 10:21:04.272 WARN 13408 --- [ restartedMain] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.UnknownHostException: eureka7003.com 2020-04-11 10:21:04.273 ERROR 13408 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MICROSERVICECLOUD_USER/microservicecloud_user_8001 - was unable to refresh its cache! status = Retry limit reached; giving up on completing the request com.netflix.discovery.shared.transport.TransportException: Retry limit reached; giving up on completing the request at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:138) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1013) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:927) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:408) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:266) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.<init>(DiscoveryClient.java:262) [eureka-client-1.6.2.jar:1.6.2] at org.springframework.cloud.netflix.eureka.CloudEurekaClient.<init>(CloudEurekaClient.java:60) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration.eurekaClient(EurekaClientAutoConfiguration.java:228) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration$$EnhancerBySpringCGLIB$$8c8fb7e2.CGLIB$eurekaClient$0(<generated>) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration$$EnhancerBySpringCGLIB$$8c8fb7e2$$FastClassBySpringCGLIB$$1e423c9d.invoke(<generated>) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) [spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration$$EnhancerBySpringCGLIB$$8c8fb7e2.eurekaClient(<generated>) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:345) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:359) [spring-cloud-context-1.2.2.RELEASE.jar:1.2.2.RELEASE] at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:176) [spring-cloud-context-1.2.2.RELEASE.jar:1.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:340) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) [spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35) [spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration.getTargetObject(EurekaRegistration.java:133) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration.getEurekaClient(EurekaRegistration.java:122) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry.maybeInitializeClient(EurekaServiceRegistry.java:56) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry.register(EurekaServiceRegistry.java:37) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration.start(EurekaAutoServiceRegistration.java:73) [spring-cloud-netflix-eureka-client-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:175) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:50) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:348) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:151) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:114) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:880) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) [spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at com.changping.springcloud.UserProvider_8001_App.main(UserProvider_8001_App.java:12) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.5.9.RELEASE.jar:1.5.9.RELEASE] 2020-04-11 10:21:04.273 WARN 13408 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Using default backup registry implementation which does not do anything. 2020-04-11 10:21:04.276 INFO 13408 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Starting heartbeat executor: renew interval is: 30 2020-04-11 10:21:04.281 INFO 13408 --- [ restartedMain] c.n.discovery.InstanceInfoReplicator : InstanceInfoReplicator onDemand update allowed rate per min is 4 2020-04-11 10:21:04.290 INFO 13408 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1586571664289 with initial instances count: 0 2020-04-11 10:21:04.397 INFO 13408 --- [ restartedMain] o.s.c.n.e.s.EurekaServiceRegistry : Registering application microservicecloud_user with eureka with status UP 2020-04-11 10:21:04.399 INFO 13408 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1586571664398, current=UP, previous=STARTING] 2020-04-11 10:21:04.406 INFO 13408 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MICROSERVICECLOUD_USER/microservicecloud_user_8001: registering service... 2020-04-11 10:21:04.598 INFO 13408 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-11 10:21:04.599 INFO 13408 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-11 10:21:04.681 INFO 13408 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 82 ms 2020-04-11 10:21:05.389 INFO 13408 --- [ restartedMain] o.e.jetty.server.AbstractConnector : Started ServerConnector@328a7e35{HTTP/1.1,[http/1.1]}{0.0.0.0:8001} 2020-04-11 10:21:05.389 INFO 13408 --- [ restartedMain] .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 8001 (http/1.1) 2020-04-11 10:21:05.394 INFO 13408 --- [ restartedMain] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8001 2020-04-11 10:21:05.412 INFO 13408 --- [ restartedMain] c.c.springcloud.UserProvider_8001_App : Started UserProvider_8001_App in 50.982 seconds (JVM running for 53.539) 2020-04-11 10:21:06.019 ERROR 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.register(AbstractJerseyEurekaHttpClient.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:798) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:104) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:88) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_172] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_172] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_172] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_172] at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_172] at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 30 common frames omitted 2020-04-11 10:21:06.020 WARN 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.ConnectException: Connection refused: connect 2020-04-11 10:21:26.029 ERROR 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.register(AbstractJerseyEurekaHttpClient.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:798) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:104) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:88) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 30 common frames omitted 2020-04-11 10:21:26.029 WARN 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out 2020-04-11 10:21:26.063 ERROR 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: eureka7003.com at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.register(AbstractJerseyEurekaHttpClient.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:798) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:104) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:88) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.UnknownHostException: eureka7003.com at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_172] at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_172] at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_172] at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:162) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 30 common frames omitted 2020-04-11 10:21:26.063 WARN 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.UnknownHostException: eureka7003.com 2020-04-11 10:21:26.064 WARN 13408 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MICROSERVICECLOUD_USER/microservicecloud_user_8001 - registration failed Retry limit reached; giving up on completing the request com.netflix.discovery.shared.transport.TransportException: Retry limit reached; giving up on completing the request at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:138) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:798) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:104) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:88) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] 2020-04-11 10:21:26.064 WARN 13408 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator : There was a problem with the instance info replicator com.netflix.discovery.shared.transport.TransportException: Retry limit reached; giving up on completing the request at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:138) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:798) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:104) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:88) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] 2020-04-11 10:21:34.278 INFO 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Disable delta property : false 2020-04-11 10:21:34.279 INFO 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null 2020-04-11 10:21:34.279 INFO 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false 2020-04-11 10:21:34.279 INFO 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Application is null : false 2020-04-11 10:21:34.279 INFO 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true 2020-04-11 10:21:34.279 INFO 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Application version is -1: true 2020-04-11 10:21:34.279 INFO 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server 2020-04-11 10:21:35.581 ERROR 13408 --- [freshExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplications(AbstractJerseyEurekaHttpClient.java:165) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1013) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:927) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1451) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1418) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_172] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_172] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_172] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_172] at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_172] at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 30 common frames omitted 2020-04-11 10:21:35.582 WARN 13408 --- [freshExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.ConnectException: Connection refused: connect 2020-04-11 10:21:35.590 ERROR 13408 --- [tbeatExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:529) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.sendHeartBeat(AbstractJerseyEurekaHttpClient.java:102) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:815) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1379) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_172] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_172] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_172] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_172] at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_172] at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 27 common frames omitted 2020-04-11 10:21:35.591 WARN 13408 --- [tbeatExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.ConnectException: Connection refused: connect 2020-04-11 10:21:55.617 ERROR 13408 --- [freshExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplications(AbstractJerseyEurekaHttpClient.java:165) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1013) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:927) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1451) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1418) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 30 common frames omitted 2020-04-11 10:21:55.617 ERROR 13408 --- [tbeatExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:529) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.sendHeartBeat(AbstractJerseyEurekaHttpClient.java:102) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:815) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1379) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 27 common frames omitted 2020-04-11 10:21:55.617 WARN 13408 --- [freshExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out 2020-04-11 10:21:55.618 WARN 13408 --- [tbeatExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out 2020-04-11 10:21:55.761 ERROR 13408 --- [tbeatExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: eureka7003.com at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.put(WebResource.java:529) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.sendHeartBeat(AbstractJerseyEurekaHttpClient.java:102) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:815) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1379) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.UnknownHostException: eureka7003.com at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_172] at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_172] at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_172] at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:162) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 27 common frames omitted 2020-04-11 10:21:55.762 WARN 13408 --- [tbeatExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.UnknownHostException: eureka7003.com 2020-04-11 10:21:55.767 ERROR 13408 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MICROSERVICECLOUD_USER/microservicecloud_user_8001 - was unable to send heartbeat! com.netflix.discovery.shared.transport.TransportException: Retry limit reached; giving up on completing the request at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:138) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$3.execute(EurekaHttpClientDecorator.java:92) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.sendHeartBeat(EurekaHttpClientDecorator.java:89) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.renew(DiscoveryClient.java:815) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1379) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] 2020-04-11 10:21:55.769 ERROR 13408 --- [freshExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: java.net.UnknownHostException: eureka7003.com at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplications(AbstractJerseyEurekaHttpClient.java:165) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1013) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:927) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1451) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1418) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.UnknownHostException: eureka7003.com at java.net.InetAddress.getAllByName0(InetAddress.java:1280) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_172] at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_172] at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:162) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 30 common frames omitted 2020-04-11 10:21:55.769 WARN 13408 --- [freshExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.UnknownHostException: eureka7003.com 2020-04-11 10:21:55.769 ERROR 13408 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MICROSERVICECLOUD_USER/microservicecloud_user_8001 - was unable to refresh its cache! status = Retry limit reached; giving up on completing the request com.netflix.discovery.shared.transport.TransportException: Retry limit reached; giving up on completing the request at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:138) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1013) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:927) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1451) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1418) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] 2020-04-11 10:21:56.066 INFO 13408 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MICROSERVICECLOUD_USER/microservicecloud_user_8001: registering service... 2020-04-11 10:21:57.318 ERROR 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.register(AbstractJerseyEurekaHttpClient.java:56) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:798) [eureka-client-1.6.2.jar:1.6.2] at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:104) [eureka-client-1.6.2.jar:1.6.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_172] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_172] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_172] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_172] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_172] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_172] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_172] at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_172] at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 29 common frames omitted 2020-04-11 10:21:57.319 WARN 13408 --- [nfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: java.net.ConnectException: Connection refused: connect
這些異常導致的原因只有一個,那就是我缺少一個步驟:
修改一個映射配置:C:\Windows\System32\drivers\etc 下有一個host文件,需要添加映射文件:
127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com
由於忽視了這一步,我付出了半天的代價,不過也有好處,服務被我啟動來啟動去,現在已經駕輕就熟了。
添加:
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost #映射文件springcloud eureka配置集群時,需要配置的映射文件,即將默認的localhost改成具體的名稱 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com
好啦,現在回去重新啟動7001、7002、7003、8001,看看是否正常。
不過8001還是沒有正常啟動,這次它報的錯誤是:
read time out
沒有辦法了,重啟eclipse試了一下,這次終於啟動了8001。(對於read time out還有待研究)
那就通過映射路徑訪問一下吧。
http://eureka7001.com:7001/
http://eureka7002.com:7002/
http://eureka7003.com:7003/
點擊訪問status:
控制台啟動情況:
沒有問題,只是一開始7001會報異常,到現在我都無法理解,它雖然報了異常但是項目並沒有什么影響:
com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.6.2.jar:1.6.2] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7002.com:7002 timed out at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 10 common frames omitted 2020-04-11 12:45:05.402 ERROR 10200 --- [reka7003.com-16] c.n.e.cluster.ReplicationTaskProcessor : Network level connection to peer eureka7003.com; retrying after delay com.sun.jersey.api.client.ClientHandlerException: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7003.com:7003 timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.6.2.jar:1.6.2] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to eureka7003.com:7003 timed out at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 10 common frames omitted
不過,這一頁還不能就這樣翻過去,因為之前可以通過consumer來訪問,比如但是現在不行了。
(后者注:瀏覽器總是會有500的錯誤,但是我並不知道錯哪了。這是我必須要解決的問題,因為我的一切困惑,一切異常都是從這里開始)
不過這兩個命令真的很好用,我再寫一遍:
netstat -ano|findstr 7001 taskkill /pid 12345 -f -t
再看一下我的內存使用情況,感謝我的電腦還活着(其實我的博客已經掉線好幾次了),服務提供者的集群就先說到這里。
看一下各個進程:
come on......
Netflix設計的Eureka使用的是AP原則
各種數據庫:
RDBMS(mysql/oracle/sqlServer)----->ACID
NOSQL(redis/mongdb)----->CAP
傳統的ACID:
A(Atomiclty) 原子性
C(Consistency) 一致性
I(Isolation) 獨立性
D(Durablity) 持久性
CAP:
C:Consistency(強一致性)
A:Avaliability(可用性)
P:Partition tolerance(分區容錯性)
CAP理論:
最多只能同時較好的滿足兩個:
CAP理論的核心:一個分布式系統不可能同時很好滿足一致性、可用性、分區容錯性、這三種需求,
因此根據CAP原理將NoSQL數據庫分成了滿足CA原則、滿足CP原則和滿足AP原則三大類;
CA:滿足一致性,可用性的系統、單點集群,通常可擴展性不強
CP:滿足一致性,分區容錯性的系統,通常性能不高。
AP:滿足可用性,分區容錯性的系統,通常一致性不高。
通常分布式系統結構,所選的種類通常是CP、AP,因為可擴展能力強,但一致性、可用性二者不可兼得。
CAP取舍:
CAP理論應用於分布式系統中,最多只能實現CAP中的兩點,所以要有一個權衡取舍。
由於當前的網絡硬件必然會出現延遲丟包的問題,所以分區容錯性“Partition tolerance”必須被實現。
C——強一致性 A——高可用性 P——分區容錯性
CA:傳統Oracle、Mysql數據庫
AP:大多數網站架構的選擇
CP:Redis/Mongodb
Eureka概述:

那么同樣作為服務注冊中心,Eureka比zookeeper好在哪里呢?
既然一個分布式系統不可能同時滿足C(一致性)、A(可用性)、P(分區容錯性)。由於分區容錯性P在分布式系統中
必須要保證,那么只能在C和A之間進行權衡。
Zookeeper保證CP
當向注冊中心查詢服務列表時,我們可以容忍注冊中心返回的是幾分鍾以前的注冊信息,但不能接受服務直接down掉。也就是說,
服務注冊功能對高可用性的要求要高於一致性。但是zookeeper會出現這樣一種情況,當master節點因為網絡故障與其它節點失去聯系時,
剩余節點會重新進行leader選取。問題在於,選取leader時間太長,30~120s,且選舉期間整個zookeeper集群都是不可用的,這就導致
在選舉期間注冊服務癱瘓。在雲部署的環境下,因網絡問題使得zookeeper集群失去master節點的概率增加,雖然服務最終可以被恢復,
但是選舉時間過長導致的注冊長期不可用是不能容忍的。
Eureka保證AP
Eureka的設計保證了可用性:Eureka各個節點平等,幾個節點down機不會影響正常節點的工作,剩余的節點依然可以提供注冊和查詢服務。
而Eureka的客戶端在向某個Eureka注冊時如果發生連接失敗,則會自動切換至其它節點,只要有一台Eureka在,就能保證注冊服務可用,
即保證可用性,只不過查到的信息可能不是最新的(不保證強一致性)。除此之外,Eureka還有一種自我保護機制:
如果在15分鍾內超過85%的節點都沒有正常的心跳,那么Eureka就認為客戶端與注冊中心出現了網絡故障,此時就會出現以下幾種情況:
1.Eurea不會從注冊列表中移出因長時間沒收到心跳而應該過期的服務。
2.Eureka仍然能夠接受新服務的注冊和查詢請求,但是不會被同步到其它節點上(即保證當前節點依然可用)
3.當網絡穩定時,當前實例的注冊信息會被同步到其它節點中。
Eureka的官方架構圖——基於集群配置:
Application Service為服務提供者 ;
Application Client為服務消費者 ;
Make Remote Call完成一次服務調用;
處於不同節點的Eureka通過Replicate進行數據同步 ;
Eureka Server之間通過復制的方式完成數據的同步:
服務啟動后向Eureka注冊,Eureka Server會將注冊信息向其他Eureka Server進行同步,當服務消費者要調用服務提供者,
則向服務注冊中心獲取服務提供者地址,然后會將服務提供者地址緩存在本地,下次再調用時,則直接從本地緩存中取,完成一次調用。
當服務注冊中心Eureka Server檢測到服務提供者因為宕機、網絡原因不可用時,則在服務注冊中心將服務置為DOWN
狀態,
並把當前服務提供者狀態向訂閱者發布,訂閱過的服務消費者更新本地緩存。
服務提供者在啟動后,周期性(默認30秒)向Eureka Server發送心跳,以證明當前服務是可用狀態。
Eureka Server在一定的時間(默認90秒)未收到客戶端的心跳,則認為服務宕機,注銷該實例。
借用張圖片仔細理解一下實際應用:
再借一張:
Eureka好啦先就這些吧:
接下來是ribbon:
Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端負載均衡工具。
簡單的說,Ribbon是Netflix發布的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間件服務連接在一起。
Ribbon客戶端組件提供一系列完善的配置項如連接超時,重試等。簡單地說,就是在配置文件中列出Load Balancer(LB)后面所有的機器,
Ribbon會自動的幫助你基於某種規則(如簡單輪形,隨機連接等)區連接這些機器。我們也很容易使用Ribbon實現自定義的負載均衡算法。
LB,即負載均衡(Load Balance),在微服務或分布式集群中經常用的一種應用
負載均衡簡單的說就是將用戶的請求平坦的分配到多個服務上,從而達到系統的(HA)高可用。
常見的負載均衡軟件有Nginx,LVS,硬件F5等。
相應的在中間件,例如:dubbbo和SpringCloud中均為我們提供了負載均衡,SpringCloud的負載均衡算法可以自定義。
集中式LB
即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬件,如F5,也可以是軟件,如nginx),
由該設施負責把訪問請求通過某種策略轉發至服務的提供方;
進程內LB
將LB邏輯集成到消費方,消費方從服務注冊中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個合適的服務器。
Ribbon就是屬於進程內LB,它只是一個類庫,集成於消費方進程,消費方通過他來獲得到服務提供方的地址。
ribbon源碼地址:
下面接着進行ribbon的配置,ribbon是客戶端,ribbon是負載均衡。
1.第一步在80消費者端添加ribbon的相關pom文件,不過之前已經添加過了:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_consumer_user_80</artifactId> <description>用戶微服務消費者</description> <dependencies> <dependency><!--自己定義的api--> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <!-- Ribbon相關eureka后無server所以是客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
2.修改application.yml,追加eureka服務注冊地址:
server: port: 80 #一定要有空格否則報錯 #增加服務地址 eureka: client: register-with-eureka: false service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
3.在配置類里增加一個注解@LoadBalanced開啟負載均衡,隨着RestTemplate一起注入到Spring中。
ConfigBean
package com.changping.springcloud.cfgbeans; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; /** * SpringBoot里定義了一個注解,Configuration * 它的作用代替了原本Spring里的ApplicationContext.xml * 凡是在開頭配有這個注解的類都可以看成是一個Spring的配置文件。 * (注解如果沒有被加載,說明需要force update) * 之前Spring中的ApplicationContext.xml里是這樣寫的,比如: * <bean id="userService" class="com.changping.mall.UerService"></bean> * */ @Configuration public class ConfigBean { @Bean//這個注解等同於xml文件中的<bean>,用於spring容器初始化后的加載。 @LoadBalanced public RestTemplate getRestTemplate() { RestTemplate rt = new RestTemplate(); return rt; } }
4.在啟動類上加一個注解(還是老套)
ConfigBean.java
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class UserConsumer_80_App { public static void main(String[] args) { SpringApplication.run(UserConsumer_80_App.class, args); } }
5.通過微服務的應用名作為前綴來進行訪問服務
UserController_Consumer.java
package com.changping.springcloud.controller; import java.util.List; 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.RestController; import org.springframework.web.client.RestTemplate; import com.changping.springcloud.entities.User; /** * REST_URL_PREFIX+"/user/add",user,Boolean.class * 請求的url....................,參數.,返回類型........ * */ @RestController public class UserController_Consumer { //private static final String REST_URL_PREFIX="http://localhost:8001"; private static final String REST_URL_PREFIX="http://MICORSERVICECLOUD_USER";//使之成為前綴,通過微服務的應用名來進行訪問 @Autowired RestTemplate restTemplate; @RequestMapping(value="/consumer/user/add") public boolean add(User user) { //postForObject意思是以post請求方式來進行請求,請求服務的地址 return restTemplate.postForObject(REST_URL_PREFIX+"/user/add",user,Boolean.class); } @RequestMapping(value="/consumer/user/get/{id}") public User get(@PathVariable("id") String userId) { return restTemplate.getForObject(REST_URL_PREFIX+"/user/get/"+userId,User.class); } @SuppressWarnings("unchecked")//對異常的處理可有可無。 @RequestMapping(value="/consumer/user/list") public List<User> list() { return restTemplate.getForObject(REST_URL_PREFIX+"/user/list",List.class); } @RequestMapping(value="/consumer/user/discovery")//提供一個路徑,訪問這個路徑相當於訪問8001服務提供者。 public Object discovery() { return restTemplate.getForObject(REST_URL_PREFIX+"/user/discovery",Object.class); } }
6.進行測試
按順序訪問7001、7002、7003、8001、80消費者客戶端
就是這個問題一直困擾着我:
按理說應該可以訪問到,但是不行,好像還是差在哪里。
最后我花了三個小時終於知道為什么,而且還是查的百度,看來我被ribbon擺了一道。
我也只能自我安慰一下,就當是給面試做准備吧,將來面試我就給它起個名“ribbon下划線之——坑你不要錢”。
8001服務端的application.yml文件:
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud_user #不能使用下划線_,要用-。改成microservicecloud-user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_8001 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
使用ribbon實現負載均衡的時候,服務名稱不能用下划線microservicecloud_user,換成中間短線microservicecloud-user。
一次次調試,一次次等待,你最終告訴我的,就是這個小下划線在搗亂?
http://localhost/consumer/user/list
http://localhost/consumer/user/discovery
http://localhost/consumer/user/get/001
console啟動情況:
7001的異常(貌似還是一種正常現象):
02:55:56.926 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 02:55:56.932 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 02:55:56.933 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_eureka_7001/target/classes/] 2020-04-12 02:55:58.796 INFO 15636 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@63c98aaf: startup date [Sun Apr 12 02:55:58 CST 2020]; root of context hierarchy 2020-04-12 02:55:59.409 INFO 15636 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-12 02:55:59.660 INFO 15636 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$1c1b278b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-12 02:56:01.650 INFO 15636 --- [ restartedMain] c.c.springcloud.Eureka_Server_7001_App : No active profile set, falling back to default profiles: default 2020-04-12 02:56:01.690 INFO 15636 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@deaf49a: startup date [Sun Apr 12 02:56:01 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@63c98aaf 2020-04-12 02:56:11.085 INFO 15636 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=c6c97a4a-5b0f-35e4-acd5-d22d08858df7 2020-04-12 02:56:11.111 INFO 15636 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-12 02:56:11.249 INFO 15636 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$322dcacf] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-12 02:56:11.261 INFO 15636 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$1c1b278b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-12 02:56:16.790 INFO 15636 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 7001 (http) 2020-04-12 02:56:16.840 INFO 15636 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-04-12 02:56:16.849 INFO 15636 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23 2020-04-12 02:56:17.948 INFO 15636 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-04-12 02:56:17.949 INFO 15636 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 16260 ms 2020-04-12 02:56:20.551 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-12 02:56:20.553 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-12 02:56:20.554 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-12 02:56:20.554 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-12 02:56:20.554 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-12 02:56:20.558 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestTraceFilter' to: [/*] 2020-04-12 02:56:20.558 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'servletContainer' to urls: [/eureka/*] 2020-04-12 02:56:20.559 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-12 02:56:20.562 INFO 15636 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-12 02:56:21.408 INFO 15636 --- [ost-startStop-1] c.s.j.s.i.a.WebApplicationImpl : Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM' 2020-04-12 02:56:21.573 INFO 15636 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-12 02:56:21.578 INFO 15636 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-12 02:56:23.287 INFO 15636 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-12 02:56:23.288 INFO 15636 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-12 02:56:31.034 INFO 15636 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@deaf49a: startup date [Sun Apr 12 02:56:01 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@63c98aaf 2020-04-12 02:56:31.722 INFO 15636 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-12 02:56:31.725 INFO 15636 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-12 02:56:31.749 INFO 15636 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.status(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-12 02:56:31.750 INFO 15636 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lastn],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.lastn(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-12 02:56:32.020 INFO 15636 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 02:56:32.021 INFO 15636 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 02:56:32.222 INFO 15636 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 02:56:35.412 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.414 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2020-04-12 02:56:35.416 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.419 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2020-04-12 02:56:35.420 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2020-04-12 02:56:35.421 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.422 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/resume || /resume.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-12 02:56:35.424 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.425 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>) 2020-04-12 02:56:35.425 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/reset],methods=[POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.reset() 2020-04-12 02:56:35.429 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2020-04-12 02:56:35.429 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.437 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke() 2020-04-12 02:56:35.439 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2020-04-12 02:56:35.440 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.442 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.443 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/features || /features.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.444 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[GET]}" onto public org.springframework.http.ResponseEntity org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.getStatus() 2020-04-12 02:56:35.444 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[POST]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.setStatus(java.lang.String) 2020-04-12 02:56:35.445 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.449 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/refresh || /refresh.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-12 02:56:35.451 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2020-04-12 02:56:35.453 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2020-04-12 02:56:35.453 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.454 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.456 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/archaius || /archaius.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-12 02:56:35.457 INFO 15636 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/pause || /pause.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-12 02:56:36.865 INFO 15636 --- [ restartedMain] o.s.ui.freemarker.SpringTemplateLoader : SpringTemplateLoader for FreeMarker: using resource loader [org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@deaf49a: startup date [Sun Apr 12 02:56:01 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@63c98aaf] and template loader path [classpath:/templates/] 2020-04-12 02:56:36.868 INFO 15636 --- [ restartedMain] o.s.w.s.v.f.FreeMarkerConfigurer : ClassTemplateLoader for Spring macros added to FreeMarker configuration 2020-04-12 02:56:37.363 INFO 15636 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2020-04-12 02:56:37.725 WARN 15636 --- [ restartedMain] o.s.c.n.a.ArchaiusAutoConfiguration : No spring.application.name found, defaulting to 'application' 2020-04-12 02:56:37.747 WARN 15636 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-12 02:56:37.748 INFO 15636 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-12 02:56:37.834 WARN 15636 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-12 02:56:37.834 INFO 15636 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-12 02:56:38.047 INFO 15636 --- [ restartedMain] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING 2020-04-12 02:56:38.665 INFO 15636 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1 2020-04-12 02:56:38.666 INFO 15636 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Client configured to neither register nor query for data. 2020-04-12 02:56:38.933 INFO 15636 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1586631398933 with initial instances count: 0 2020-04-12 02:56:40.522 INFO 15636 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initializing ... 2020-04-12 02:56:40.527 INFO 15636 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://eureka7003.com:7003/eureka/, http://eureka7002.com:7002/eureka/] 2020-04-12 02:56:43.206 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-12 02:56:43.207 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-12 02:56:43.207 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-12 02:56:43.207 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-12 02:56:44.218 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-12 02:56:44.219 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-12 02:56:44.219 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-12 02:56:44.219 INFO 15636 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-12 02:56:45.008 INFO 15636 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://eureka7003.com:7003/eureka/ 2020-04-12 02:56:45.008 INFO 15636 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : Replica node URL: http://eureka7002.com:7002/eureka/ 2020-04-12 02:56:45.082 INFO 15636 --- [ restartedMain] c.n.e.registry.AbstractInstanceRegistry : Finished initializing remote region registries. All known remote regions: [] 2020-04-12 02:56:45.084 INFO 15636 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initialized 2020-04-12 02:56:46.633 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-12 02:56:46.656 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-12 02:56:46.660 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-12 02:56:46.662 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshEndpoint' has been autodetected for JMX exposure 2020-04-12 02:56:46.731 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'restartEndpoint' has been autodetected for JMX exposure 2020-04-12 02:56:46.735 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'serviceRegistryEndpoint' has been autodetected for JMX exposure 2020-04-12 02:56:46.737 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-12 02:56:46.743 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-12 02:56:46.809 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'restartEndpoint': registering with JMX server as MBean [org.springframework.cloud.context.restart:name=restartEndpoint,type=RestartEndpoint] 2020-04-12 02:56:46.862 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'serviceRegistryEndpoint': registering with JMX server as MBean [org.springframework.cloud.client.serviceregistry.endpoint:name=serviceRegistryEndpoint,type=ServiceRegistryEndpoint] 2020-04-12 02:56:46.926 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-12 02:56:46.955 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=deaf49a,type=ConfigurationPropertiesRebinder] 2020-04-12 02:56:46.982 INFO 15636 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.endpoint:name=refreshEndpoint,type=RefreshEndpoint] 2020-04-12 02:56:47.951 INFO 15636 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-12 02:56:47.952 INFO 15636 --- [ restartedMain] o.s.c.n.e.s.EurekaServiceRegistry : Registering application unknown with eureka with status UP 2020-04-12 02:56:48.123 INFO 15636 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Setting the eureka configuration.. 2020-04-12 02:56:48.128 INFO 15636 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Eureka data center value eureka.datacenter is not set, defaulting to default 2020-04-12 02:56:48.128 INFO 15636 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Eureka environment value eureka.environment is not set, defaulting to test 2020-04-12 02:56:48.166 INFO 15636 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false 2020-04-12 02:56:48.176 INFO 15636 --- [ Thread-17] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context 2020-04-12 02:56:48.177 INFO 15636 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Got 1 instances from neighboring DS node 2020-04-12 02:56:48.178 INFO 15636 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Renew threshold is: 1 2020-04-12 02:56:48.181 INFO 15636 --- [ Thread-17] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP 2020-04-12 02:56:48.206 INFO 15636 --- [ Thread-17] e.s.EurekaServerInitializerConfiguration : Started Eureka Server 2020-04-12 02:56:48.414 INFO 15636 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 7001 (http) 2020-04-12 02:56:48.415 INFO 15636 --- [ restartedMain] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 7001 2020-04-12 02:56:48.427 INFO 15636 --- [ restartedMain] c.c.springcloud.Eureka_Server_7001_App : Started Eureka_Server_7001_App in 51.444 seconds (JVM running for 53.606) 2020-04-12 02:57:48.184 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 02:58:48.184 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 02:59:18.533 INFO 15636 --- [nio-7001-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-12 02:59:18.534 INFO 15636 --- [nio-7001-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-12 02:59:19.294 INFO 15636 --- [nio-7001-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 760 ms 2020-04-12 02:59:23.194 INFO 15636 --- [nio-7001-exec-2] c.n.e.registry.AbstractInstanceRegistry : Registered instance MICROSERVICECLOUD-USER/microservicecloud_user_8001 with status UP (replication=false) 2020-04-12 02:59:25.144 ERROR 15636 --- [ureka7002.com-1] c.n.e.cluster.ReplicationTaskProcessor : Network level connection to peer eureka7002.com; retrying after delay com.sun.jersey.api.client.ClientHandlerException: java.net.SocketTimeoutException: Read timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.6.2.jar:1.6.2] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_172] at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_172] at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_172] at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_172] at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:161) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:82) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:278) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:286) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:257) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:230) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:684) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 10 common frames omitted 2020-04-12 02:59:25.143 ERROR 15636 --- [ureka7003.com-3] c.n.e.cluster.ReplicationTaskProcessor : Network level connection to peer eureka7003.com; retrying after delay com.sun.jersey.api.client.ClientHandlerException: java.net.SocketTimeoutException: Read timed out at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.netflix.eureka.cluster.DynamicGZIPContentEncodingFilter.handle(DynamicGZIPContentEncodingFilter.java:48) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.6.2.jar:1.6.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.eureka.transport.JerseyReplicationClient.submitBatchUpdates(JerseyReplicationClient.java:116) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.cluster.ReplicationTaskProcessor.process(ReplicationTaskProcessor.java:71) ~[eureka-core-1.6.2.jar:1.6.2] at com.netflix.eureka.util.batcher.TaskExecutors$BatchWorkerRunnable.run(TaskExecutors.java:187) [eureka-core-1.6.2.jar:1.6.2] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_172] at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_172] at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_172] at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_172] at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:161) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:82) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:278) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:286) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:257) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:230) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.8.jar:4.4.8] at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:684) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:173) ~[jersey-apache-client4-1.19.1.jar:1.19.1] ... 10 common frames omitted //下面就是有請求的時候打印出的語句: 2020-04-12 02:59:48.185 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:00:48.185 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:01:48.187 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-12 03:02:48.188 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-12 03:03:48.188 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:04:48.189 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:05:48.189 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:06:48.190 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:07:48.190 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:08:48.191 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:09:48.191 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:10:48.192 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:11:45.209 INFO 15636 --- [hresholdUpdater] c.n.e.r.PeerAwareInstanceRegistryImpl : Current renewal threshold is : 3 2020-04-12 03:11:48.193 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-12 03:12:48.194 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:13:48.194 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:14:48.194 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:15:48.195 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:16:48.196 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:17:48.196 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:18:48.196 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:19:48.197 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-12 03:20:48.198 INFO 15636 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms
80端口的異常(應該也是一種正常現象):
03:00:01.916 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 03:00:01.920 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 03:00:01.921 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_consumer_user_80/target/classes/, file:/D:/workspace/springboot/microservicecloud/microservicecloud_api/target/classes/] 2020-04-12 03:00:04.206 INFO 7640 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@4e406e9b: startup date [Sun Apr 12 03:00:04 CST 2020]; root of context hierarchy 2020-04-12 03:00:04.999 INFO 7640 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-12 03:00:05.238 INFO 7640 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$20c88162] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-12 03:00:09.365 INFO 7640 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888 2020-04-12 03:00:12.835 WARN 7640 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:8888/application/default": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect 2020-04-12 03:00:12.842 INFO 7640 --- [ restartedMain] c.c.springcloud.UserConsumer_80_App : No active profile set, falling back to default profiles: default 2020-04-12 03:00:12.865 INFO 7640 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@64bd4c08: startup date [Sun Apr 12 03:00:12 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@4e406e9b 2020-04-12 03:00:15.525 INFO 7640 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=7b495554-581a-3e22-a310-343c8828da52 2020-04-12 03:00:15.567 INFO 7640 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-12 03:00:15.619 INFO 7640 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$20c88162] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-12 03:00:19.532 INFO 7640 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 80 (http) 2020-04-12 03:00:19.559 INFO 7640 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-04-12 03:00:19.561 INFO 7640 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23 2020-04-12 03:00:20.446 INFO 7640 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-04-12 03:00:20.447 INFO 7640 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 7582 ms 2020-04-12 03:00:20.784 INFO 7640 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-12 03:00:20.791 INFO 7640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-12 03:00:20.851 INFO 7640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-12 03:00:20.852 INFO 7640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-12 03:00:20.853 INFO 7640 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-12 03:00:23.950 INFO 7640 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@64bd4c08: startup date [Sun Apr 12 03:00:12 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@4e406e9b 2020-04-12 03:00:24.201 INFO 7640 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/consumer/user/add]}" onto public boolean com.changping.springcloud.controller.UserController_Consumer.add(com.changping.springcloud.entities.User) 2020-04-12 03:00:24.203 INFO 7640 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/consumer/user/get/{id}]}" onto public com.changping.springcloud.entities.User com.changping.springcloud.controller.UserController_Consumer.get(java.lang.String) 2020-04-12 03:00:24.204 INFO 7640 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/consumer/user/list]}" onto public java.util.List<com.changping.springcloud.entities.User> com.changping.springcloud.controller.UserController_Consumer.list() 2020-04-12 03:00:24.204 INFO 7640 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/consumer/user/discovery]}" onto public java.lang.Object com.changping.springcloud.controller.UserController_Consumer.discovery() 2020-04-12 03:00:24.210 INFO 7640 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-12 03:00:24.211 INFO 7640 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-12 03:00:24.282 INFO 7640 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 03:00:24.283 INFO 7640 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 03:00:24.371 INFO 7640 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-12 03:00:25.488 WARN 7640 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server 2020-04-12 03:00:25.712 WARN 7640 --- [ restartedMain] o.s.c.n.a.ArchaiusAutoConfiguration : No spring.application.name found, defaulting to 'application' 2020-04-12 03:00:25.721 WARN 7640 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-12 03:00:25.722 INFO 7640 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-12 03:00:26.058 WARN 7640 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-12 03:00:26.058 INFO 7640 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-12 03:00:26.405 INFO 7640 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-12 03:00:26.422 INFO 7640 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-12 03:00:26.425 INFO 7640 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-12 03:00:26.427 INFO 7640 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-12 03:00:26.431 INFO 7640 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-12 03:00:26.913 INFO 7640 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-12 03:00:26.935 INFO 7640 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=64bd4c08,type=ConfigurationPropertiesRebinder] 2020-04-12 03:00:27.219 INFO 7640 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-12 03:00:27.235 INFO 7640 --- [ restartedMain] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING 2020-04-12 03:00:28.504 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1 2020-04-12 03:00:32.693 INFO 7640 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-12 03:00:32.693 INFO 7640 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-12 03:00:35.149 INFO 7640 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-12 03:00:35.149 INFO 7640 --- [ restartedMain] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-12 03:00:36.784 INFO 7640 --- [ restartedMain] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration 2020-04-12 03:00:38.656 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Disable delta property : false 2020-04-12 03:00:38.656 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null 2020-04-12 03:00:38.656 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false 2020-04-12 03:00:38.656 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Application is null : false 2020-04-12 03:00:38.656 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true 2020-04-12 03:00:38.656 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Application version is -1: true 2020-04-12 03:00:38.656 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server 2020-04-12 03:00:39.397 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : The response status is 200 2020-04-12 03:00:39.478 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Not registering with Eureka server per configuration 2020-04-12 03:00:39.481 INFO 7640 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1586631639481 with initial instances count: 1 2020-04-12 03:00:39.534 INFO 7640 --- [ restartedMain] o.s.c.n.e.s.EurekaServiceRegistry : Registering application unknown with eureka with status UP 2020-04-12 03:00:40.451 INFO 7640 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 80 (http) 2020-04-12 03:00:40.456 INFO 7640 --- [ restartedMain] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 80 2020-04-12 03:00:40.471 INFO 7640 --- [ restartedMain] c.c.springcloud.UserConsumer_80_App : Started UserConsumer_80_App in 38.487 seconds (JVM running for 43.215) 2020-04-12 03:02:08.590 INFO 7640 --- [-nio-80-exec-10] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-12 03:02:08.591 INFO 7640 --- [-nio-80-exec-10] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-12 03:02:08.620 INFO 7640 --- [-nio-80-exec-10] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 29 ms 2020-04-12 03:02:08.793 INFO 7640 --- [-nio-80-exec-10] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@445ada63: startup date [Sun Apr 12 03:02:08 CST 2020]; parent: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@64bd4c08 2020-04-12 03:02:09.085 INFO 7640 --- [-nio-80-exec-10] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-12 03:02:09.738 INFO 7640 --- [-nio-80-exec-10] c.netflix.config.ChainedDynamicProperty : Flipping property: MICROSERVICECLOUD-USER.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 2020-04-12 03:02:09.807 INFO 7640 --- [-nio-80-exec-10] c.n.u.concurrent.ShutdownEnabledTimer : Shutdown hook installed for: NFLoadBalancer-PingTimer-MICROSERVICECLOUD-USER 2020-04-12 03:02:09.893 INFO 7640 --- [-nio-80-exec-10] c.netflix.loadbalancer.BaseLoadBalancer : Client: MICROSERVICECLOUD-USER instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=MICROSERVICECLOUD-USER,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null 2020-04-12 03:02:09.930 INFO 7640 --- [-nio-80-exec-10] c.n.l.DynamicServerListLoadBalancer : Using serverListUpdater PollingServerListUpdater 2020-04-12 03:02:09.993 INFO 7640 --- [-nio-80-exec-10] c.netflix.config.ChainedDynamicProperty : Flipping property: MICROSERVICECLOUD-USER.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 2020-04-12 03:02:10.001 INFO 7640 --- [-nio-80-exec-10] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client MICROSERVICECLOUD-USER initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=MICROSERVICECLOUD-USER,current list of Servers=[192.168.139.1:8001],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] },Server stats: [[Server:192.168.139.1:8001; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0] ]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@3f0c10fe 2020-04-12 03:02:10.938 INFO 7640 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty : Flipping property: MICROSERVICECLOUD-USER.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 2020-04-12 03:05:38.660 INFO 7640 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration 2020-04-12 03:10:38.662 INFO 7640 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration 2020-04-12 03:15:38.664 INFO 7640 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration 2020-04-12 03:20:38.666 INFO 7640 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration 2020-04-12 03:25:38.667 INFO 7640 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
還有就是控制台總是動態的變換端口。
Ribbon和Eureka整合后Consumer可以直接調用服務而不用再關心地址和端口號。
好啦,這一頁可以真的翻過去了,天都快亮了。——2020/04/12/03:31
討厭的ribbon我來啦,開啟負載均衡吧。
ribbon在消費者端,可以提供輪詢負載均衡,可以很公平的輪詢各個服務提供者。
Ribbon在工作時分成兩步
第一步先選擇EurekaServer,它優先選擇在同一個區域內負載較少的server。
第二步再根據用戶指定的策略,從server取到的服務注冊列表中選擇一個地址。
其中Ribbon提供了多種策略:比如輪詢、隨機和根據相應時間加權。
接下來再添加兩個服務提供者8002、8003。
還是老套,和8001的創建方法一致需要在microservicecloud右鍵new Model:
next
接着還有8002、8003如法炮制。
當前項目結構是這樣:
1.導入pom文件,以8002為例:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_provider_user_8002</artifactId> <dependencies> <!-- 引入microservicecloud_api的jar包--> <dependency> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <!-- actuator監控信息完善 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 將微服務provider提供的服務注冊進eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
接下來將8001中的包粘過去:
記得看一眼controller、service、dao是否都粘過去了。
接下來改一下8002、8003啟動類的名字:
接下來粘mybatis、application.yml
接着就更新一下項目吧:
以8002為例需要修改端口號,8003同理,因為發布的是相同的服務所以說實例名就不改:
server: port: 8002 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud-user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_8001 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
現在有三個微服務8001、8002、8003,微服務化的核心是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底地去解耦化。
每一個微服務提供單個業務功能的服務,一個服務做一件事,從技術角度看就是一種小而獨立的處理器,類似進程概念,能夠自行
單獨啟動或銷毀,擁有自己獨立的數據庫。
所以接下來需要再建兩個數據庫。
打開mysql:
分別再建db0326、db0327。然后分別建兩個表db_user。
db0326數據庫、表:
db0327數據庫、表:
建表語句如下:
create TABLE db_user( userid varchar(20) primary key not null auto_increment, userpass varchar(6), username varchar(20), db_source varchar(255) ); insert into db_user(userid,userpass,username,db_source) VALUES('001','123','tom',DATABASE()); insert into db_user(userid,userpass,username,db_source) VALUES('002','123','jerry',DATABASE()); insert into db_user(userid,userpass,username,db_source) VALUES('003','123','Donalg',DATABASE()); insert into db_user(userid,userpass,username,db_source) VALUES('004','123','Mickey',DATABASE()); select * from db_user
接着修改8002、8003的application.yml。
需要修改的主要有:端口號、數據庫名。
不需要修改的有:對外暴露的同一服務實例名。
現在來修改:8002。(8003同理)
server: port: 8002 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud-user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0326 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_8001 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
現在開始測試:按順序啟動7001、7002、7003、8001、8002、8003、80
啟動之前需要保存一下博客,有點危險。
接着訪問:
http://localhost:8001/user/list
http://localhost:8002/user/list
http://localhost:8003/user/list
只是有件事我很費解:8003提供者的端口號為什么顯示8002?
還有為什么8002分明啟動了,但是什么也沒有打印出來?
由於消費者80端口已經啟動了,並且有ribbon的負載均衡所以可以進行測試:
http://localhost/consumer/user/list
為了調這個錯,我給自己的電腦新裝了4g的DDR4內存條,總算沒有卡掉頁的情況,散熱器也不拼命的轉了。
開了七個進程的結果:
上面顯示db0327,但當我關掉8003提供者時,再次訪問卻沒有返回正確信息:
就是這樣,看來還是有錯,負載均衡不起作用,每次的服務都會被上一個服務提供者覆蓋。
......
也就是說每次都會被最后一個服務覆蓋,找了幾個小時,我一直以為是負載均衡不起作用,但實際上不是:
server: port: 8003 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud-user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0327 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_8001
#原來是服務提供者的實例名沒改,我一直以為不需要改,看來實例名可以有多個。真正不需要改的是應用名,多個提供者共同維護一個應用,而一個應用則對於了一個服務。 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
所以我堅信實例名改成8003即可。8002也需要改,這樣才能輪詢,消費者上@LoadBalanced注解負責輪詢,8001、8002、8003上的@EnableDiscoveryClient負責暴露服務提供者。
還有一件事,就是說eureka里集成了ribbon,好像不導入ribbon依賴也可以。
接着關閉8002、8003然后重新啟動。
好了,現在重新測試一下,看看ribbon如何輪詢:
http://localhost/consumer/user/list
刷新:
再刷新:
訪問http://localhost:7001/
可以看到三個服務實例名,由此得出結論:ribbon是客戶端軟負載均衡組件。
至此,ribbon的負載均衡實驗完美結束。可也浪費了我大把時光。不過好像對流程更加熟悉了一些。
接下來研究一下自定義負載均衡IRule:
根據特定算法從服務列表中選取一個要訪問的服務:
1.RoundRobinRule——輪詢策略
2.RandomRule——隨機策略
3.AvailabilityFilteringRule——可用過濾(過濾故障處於斷路跳閘狀態的服務,高並發超過閾值服務,沒被被過濾則輪詢方式訪問)
4.WeightedResponseTimeRule——響應時間權重,先到先得,響應時間快的服務權重更大,被選中的幾率也會增加,初次啟動時可以采用輪詢,之后可以切換到WeightedResponseTimeRule
5.RetryRule——先使用輪詢獲得服務,如果獲得失敗就會在指定時間重試。
6.BestAvailableRule——過濾掉多次訪問也沒有恢復而且被斷路器跳閘的服務,然后選擇一個並發小的服務。
7.ZoneAvoidanceRule——默認規則,復合判斷server所在的區域的性能和server的可用性選擇服務器。
ribbon源碼地址:
ribbon源碼
ribbon的負載均衡涉及到的類:
IRule.java
https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/IRule.java
package com.netflix.loadbalancer; public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers according to key * * @return choosen Server object. NULL is returned if none * server is available */ public Server choose(Object key); public void setLoadBalancer(ILoadBalancer lb); public ILoadBalancer getLoadBalancer(); }
接下來就去消費者80那里定義隨機規則:
package com.changping.springcloud.cfgbeans; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; /** * SpringBoot里定義了一個注解,Configuration * 它的作用代替了原本Spring里的ApplicationContext.xml * 凡是在開頭配有這個注解的類都可以看成是一個Spring的配置文件。 * (注解如果沒有被加載,說明需要force update) * 之前Spring中的ApplicationContext.xml里是這樣寫的,比如: * <bean id="userService" class="com.changping.mall.UerService"></bean> * */ @Configuration public class ConfigBean { @Bean//這個注解等同於xml文件中的<bean>,用於spring容器初始化后的加載。 @LoadBalanced public RestTemplate getRestTemplate() { RestTemplate rt = new RestTemplate(); return rt; } /**隨機策略,隨機訪問服務8001、8002、8003服務提供者, * 默認策略是輪詢,重新聲明訪問規則,將會覆蓋默認輪詢規則。 * */ @Bean public IRule myRule() { RandomRule rdRule = new RandomRule(); return rdRule; } }
接着和之前一樣順序啟動各個進程,觀察瀏覽器上的訪問方式。
可以看到已經不是輪詢的方式訪問服務者了,而是隨機訪問,每一台都有可能被訪問多次。
所以以后需要哪種方式,就創建哪種方式的對象即可。
接下來看看比較有趣的一個訪問策略:RetryRule
package com.changping.springcloud.cfgbeans; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RetryRule; /** * SpringBoot里定義了一個注解,Configuration * 它的作用代替了原本Spring里的ApplicationContext.xml * 凡是在開頭配有這個注解的類都可以看成是一個Spring的配置文件。 * (注解如果沒有被加載,說明需要force update) * 之前Spring中的ApplicationContext.xml里是這樣寫的,比如: * <bean id="userService" class="com.changping.mall.UerService"></bean> * */ @Configuration public class ConfigBean { @Bean//這個注解等同於xml文件中的<bean>,用於spring容器初始化后的加載。 @LoadBalanced public RestTemplate getRestTemplate() { RestTemplate rt = new RestTemplate(); return rt; } /**隨機策略,隨機訪問服務8001、8002、8003服務提供者, * 默認策略是輪詢,重新聲明訪問規則,將會覆蓋默認輪詢規則。 * */ @Bean public IRule myRule() { RetryRule rtRule = new RetryRule(); return rtRule; } }
接着關閉8003然后重啟80看看會發生什么:
可以看到8003被關閉,所以只會訪問8001、8002。
好了再試試自定義的策略,完全自己去定義:
在啟動該微服務的時候就能去加載我們的自定義Ribbon配置類,從而使配置生效:
@RibbonClient(name="MICROSERVICECLOUD-USER",configuration=MyselfRule.class)
這個注解需要放在啟動類上。
不過這個類的使用有要求:
這個自定義的類不能放在@ComponentScan所掃描的當前包下和子包下,
否則這個自定義的配置類就會被所有的Ribbon客戶端共享,就無法達到特殊化定制的目的。
由於這個要求的限制,所以需要單獨建一個包,然后自定義配置類
MyselfRule.java
package com.changping.springcloud.myrule; import org.springframework.context.annotation.Configuration; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; @Configuration public class MyselfRule {
@Bean //后者注:后來發現沒加這個注解,竟然也好使了,可能只是巧合吧。按理說不好使。因為面我自定義的5次執行不好使,就是因為沒加這個注解,現在我懷疑自己的數據是怎么得來(那幾張圖片)。//還
public IRule myRule() { return new RandomRule(); } }
啟動類上配置(主啟動類上也有帶有@ComponentScan——SpringBootApplication):
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; import com.changping.springcloud.myrule.MyselfRule; @SpringBootApplication @EnableEurekaClient @RibbonClient(name="MICROSERVICECLOUD-USER",configuration=MyselfRule.class) public class UserConsumer_80_App { public static void main(String[] args) { SpringApplication.run(UserConsumer_80_App.class, args); } }
當然在這里自定義,需要刪除原先的隨機訪問(注釋即可)。
package com.changping.springcloud.cfgbeans; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RetryRule; /** * SpringBoot里定義了一個注解,Configuration * 它的作用代替了原本Spring里的ApplicationContext.xml * 凡是在開頭配有這個注解的類都可以看成是一個Spring的配置文件。 * (注解如果沒有被加載,說明需要force update) * 之前Spring中的ApplicationContext.xml里是這樣寫的,比如: * <bean id="userService" class="com.changping.mall.UerService"></bean> * */ @Configuration public class ConfigBean { @Bean//這個注解等同於xml文件中的<bean>,用於spring容器初始化后的加載。 @LoadBalanced public RestTemplate getRestTemplate() { RestTemplate rt = new RestTemplate(); return rt; } /**隨機策略,隨機訪問服務8001、8002、8003服務提供者, * 默認策略是輪詢,重新聲明訪問規則,將會覆蓋默認輪詢規則。 * */ /*@Bean public IRule myRule() { RetryRule rtRule = new RetryRule(); return rtRule; }*/ }
接下來去測試:(終於知道為什么把所有得服務提供者關閉會報錯:找不到實例。)
順序啟動各個應用7001、7002、7003、8001、8002、8003、80:
其實不按順序也可以,不過大體上注冊中心要先起來。
可以看到自己定義得配置類已經生效了(隨機訪問),這樣消費者就可以以自定義得方式訪問服務提供者。
下面看一下官網的RandomRule :
package com.netflix.loadbalancer import com.netflix.client.config.IClientConfig; import java.util.List; import java.util.concurrent.ThreadLocalRandom; /** * A loadbalacing strategy that randomly distributes traffic amongst existing * servers. * * @author stonse * */ public class RandomRule extends AbstractLoadBalancerRule { /** * Randomly choose from all living servers */ @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE") public Server choose(ILoadBalancer lb, Object key) { if (lb == null) { return null; } Server server = null; while (server == null) { if (Thread.interrupted()) { return null; } List<Server> upList = lb.getReachableServers(); List<Server> allList = lb.getAllServers(); int serverCount = allList.size(); if (serverCount == 0) { /* * No servers. End regardless of pass, because subsequent passes * only get more restrictive. */ return null; } int index = chooseRandomInt(serverCount); server = upList.get(index); if (server == null) { /* * The only time this should happen is if the server list were * somehow trimmed. This is a transient condition. Retry after * yielding.如果中斷就會讓出cpu使用權 */ Thread.yield(); continue; } if (server.isAlive()) { return (server); } // Shouldn't actually happen.. but must be transient or a bug. server = null; Thread.yield(); } return server; } protected int chooseRandomInt(int serverCount) { return ThreadLocalRandom.current().nextInt(serverCount); } @Override public Server choose(Object key) { return choose(getLoadBalancer(), key); } }
現在繼續提供一種自定義的方法,可以在輪詢的策略上,每個服務調用5次。
package com.changping.springcloud.myrule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.netflix.loadbalancer.IRule; @Configuration public class MyselfRule { @Bean public IRule myRule() { return new MyselfRule2();//調用自定義規則 } }
package com.changping.springcloud.myrule; 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; public class MyselfRule2 extends AbstractLoadBalancerRule { private int total = 0; // 總共被調用的次數,目前要求每台被調用5次 private int currentIndex = 0; // 當前提供服務的機器號 public Server choose(ILoadBalancer lb, Object key) { if (lb == null) { return null; } Server server = null; while (server == null) { if (Thread.interrupted()) { return null; } List<Server> upList = lb.getReachableServers(); List<Server> allList = lb.getAllServers(); int serverCount = allList.size(); if (serverCount == 0) { /* * No servers. End regardless of pass, because subsequent passes only get more * restrictive. */ return null; } // int index = rand.nextInt(serverCount);// java.util.Random().nextInt(3); // server = upList.get(index); // 自定義開始: if (total < 5) { server = upList.get(currentIndex);// 通過8001、2、3三個服務實例的數組下標獲得實例 total++; //通過瀏覽器訪問或刷新才會累加 } else { total = 0; currentIndex++; //通過瀏覽器訪問或刷新才會累加
if (currentIndex >= upList.size()) { currentIndex = 0; } } // 自定義結束(不能用循環語句來做這種題,因為應該是每次刷新/使total計數,而不是循環使之改變。) if (server == null) { /* * The only time this should happen is if the server list were somehow trimmed. * This is a transient condition. Retry after yielding. */ Thread.yield(); continue; } if (server.isAlive()) { return (server); } // Shouldn't actually happen.. but must be transient or a bug. 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 } }
點五次刷新:
點五次刷新:
點五次刷新(回到db0327):
好了ribbon自定義負載均衡就是這些:
Feign負載均衡:
Feign是一個聲明式的Web服務客戶端。這使得Web服務客戶端的寫入更加方便 要使用Feign創建一個界面並對其進行注釋。它具有可插入的注釋支持,
包括Feign注釋和JAX-RS注釋。Feign還支持可插拔編碼器和解碼器。Spring Cloud添加了對Spring MVC注釋的支持,
並在Spring Web中使用默認使用的相同HttpMessageConverters
。
Spring Cloud集成Ribbon和Eureka以在使用Feign時提供負載平衡的http客戶端。
簡而言之:
Feign是一個聲明式的web服務客戶端,使得編寫web服務客戶端變得非常容易,只需要創建一個接口,然后在上面添加注解即可。
示例Spring Boot應用程序:
@Configuration @ComponentScan @EnableAutoConfiguration @EnableEurekaClient @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Feign旨在使編寫Java Http客戶端變得容易。
前面在使用Ribbon+RestTemplate時,利用RestTemplate對http請求的封裝處理,形成了一套模板化的調用方法。但是在實際開發中,
由於對服務依賴的調用可能不止一處,往往一個接口會被多處調用,所以通常都會針對每一個微服務自行封裝一些客戶端類
包裝這些依賴服務的調用。所以,Feign在此基礎上做了進一步封裝,由他來幫助我們定義和實現依賴服務接口的定義。在Feign的實現下,
我們只需要創建一個接口並使用注解的方式來配置它(以前是Dao接口上面標注Mapper注解,現在是一個微服務接口上面標注一個Feign的注解即可),
即可完成對服務提供方的接口綁定,簡化了使用SSpring cloud Ribbon時,自動封裝服務調用客戶端的開發量。
接下來利用Feign面向接口編程:
像之前一樣通過在microservicecloud上進行右鍵創建maven model
將80消費者里的包粘過去,還有配置文件。
去掉自定義的負載均衡,然后改一下啟動類名字:
接着改一下pom.xml
將80的pom依賴拷貝過去,然后添加一個Feign依賴:
Feign依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
pom全部內容:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_consumer_user_feign</artifactId> <dependencies> <dependency><!--自己定義的api--> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <!-- Feign相關 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <!-- Ribbon相關 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
接下來需要修改microservicecloud_api在pom里添加Feign的依賴(之前添加過):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId><!-- 聲明父級依賴所在項目 --> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_api</artifactId><!--聲明模塊pom所在項目--> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
<!--Feign依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> </dependencies> </project>
既然放在統一的entities里說明不止是它需要:
接着在microservicecloud_api中添加service
UserClientService
package com.changping.springcloud.service; import java.util.List; import org.springframework.cloud.netflix.feign.FeignClient; 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 com.changping.springcloud.entities.User; @FeignClient(value="MICROSERVICECLOUD-USER")//應用名,加上服務提供者的方法。 public interface UserClientService { @RequestMapping(value="/user/add",method=RequestMethod.POST) public boolean add(@RequestBody User user); @RequestMapping(value="/user/get/{id}",method=RequestMethod.GET) public User get(@PathVariable("id")String userId); @RequestMapping(value="/user/list",method=RequestMethod.GET) public List<User> list(); }
接着在microservicecloud_api右鍵run as maven clean、maven install
不過事先需要刪除之前的jar包;
Failed to execute goal org.apache.maven.plugins:
maven-clean-plugin:2.5:clean (default-clean) on project microservicecloud_api:
Failed to clean project:
Failed to delete D:\workspace\springboot\microservicecloud\microservicecloud_api\target\microservicecloud_api-0.0.1-SNAPSHOT.jar
去D盤刪除target下的所有文件:
然后重啟eclipse就可以刪除了。
重新clean、 install
[INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.changping.springcloud:microservicecloud_api:jar:0.0.1-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-resources-plugin is missing. @ com.changping.springcloud:microservicecloud:0.0.1-SNAPSHOT, D:\workspace\springboot\microservicecloud\pom.xml, line 77, column 12 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building microservicecloud_api 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ microservicecloud_api --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ microservicecloud_api --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 2 source files to D:\workspace\springboot\microservicecloud\microservicecloud_api\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ microservicecloud_api --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ microservicecloud_api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ microservicecloud_api --- [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ microservicecloud_api --- [INFO] Building jar: D:\workspace\springboot\microservicecloud\microservicecloud_api\target\microservicecloud.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ microservicecloud_api --- [INFO] Installing D:\workspace\springboot\microservicecloud\microservicecloud_api\target\microservicecloud.jar to C:\Users\YZ\.m2\repository\com\changping\springcloud\microservicecloud_api\0.0.1-SNAPSHOT\microservicecloud_api-0.0.1-SNAPSHOT.jar [INFO] Installing D:\workspace\springboot\microservicecloud\microservicecloud_api\pom.xml to C:\Users\YZ\.m2\repository\com\changping\springcloud\microservicecloud_api\0.0.1-SNAPSHOT\microservicecloud_api-0.0.1-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.353 s [INFO] Finished at: 2020-04-14T17:17:45+08:00 [INFO] Final Memory: 29M/222M [INFO] ------------------------------------------------------------------------
接着更新全部項目
其實還是有個感嘆號,去maven倉庫刪除莫個plugin即可,如果刪不了,可以關閉項目再刪,不需要關閉eclipse。
還是沒好,報錯如下:
Description Resource Path Location Type Project 'microservicecloud_api' is missing required library: 'target/microservicecloud_api-0.0.1-SNAPSHOT.jar' microservicecloud_api Build path Build Path Problem
說是jar包沖突,需要在項目上右鍵build path然后配置,找到錯誤的包,刪除即可:
刪除后項目果然沒有感嘆號了,又耽誤我一個小時。起碼我知道了如果刪除東西刪不掉,只需要關閉項目即可。
接着在microservicecloud_consumer_user_feign工程修改Controller,添加上一步新建的UserClientService接口,然后再寫上代碼,風格和controller調用service一樣。
package com.changping.springcloud.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; 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.RestController; import com.changping.springcloud.entities.User; import com.changping.springcloud.service.UserClientService; @RestController public class UserController_Consumer { @Autowired UserClientService userClientService; /**把8001端口里的代碼粘過來,不需要考慮get和post方式*/ @RequestMapping(value="/consumer/user/add") public boolean add(@RequestBody User user) { boolean b = userClientService.add(user); return b; } @RequestMapping(value="/consumer/user/get/{id}") public User get(@PathVariable("id")String userId) { User user = userClientService.get(userId); return user; } @RequestMapping(value="/consumer/user/list") public List<User> list() { List<User> list_user = userClientService.list(); return list_user; } }
這里可以看成Feign和ribbon的區別:Feign是面向接口,而ribbon必須要依靠restTemplate,Feign是ribbon和RestTemplate的結合。
microservicecloud_consumer_user_feign工程修改啟動類名,添加兩個注解:
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @EnableEurekaClient @EnableFeignClients(basePackages= {"com.changping.springcloud"}) @ComponentScan("com.changping.springcloud") public class UserConsumer_80_Feign_App { public static void main(String[] args) { SpringApplication.run(UserConsumer_80_Feign_App.class, args); } }
Feign集成了Ribbon
利用Ribbon維護了MicroServiceColud_User的服務列表信息,並且通過輪詢實現了客戶端的負載均衡。而Ribbon不同的是,
通過Feign只需要定義服務綁定接口且以聲明式的方法,優雅而簡單的實現了服務調用。
測試:啟動7001、7002、7003、8001、8002、8003、feign消費者客戶端,測試之前可以將之前的myrule包還有啟動類上的注解刪除,如果不刪除,則會同一個服務輪詢五次。
接着訪問:
刷新:
刷新:
實現了和ribbon一樣的功能,可以看到毫無bug,我都有點不習慣了。
總結:
Feign通過接口的方法調用Rest服務(之前是Ribbon+RestTemplate),
請求發送給Eureka服務器(http://MICROSERVICECLOUD-USER/user/list),
通過Feign直接找到服務接口,由於在進行服務調用的時候融合了Ribbon技術,所以也支持負載均衡作用。
Hystrix
服務雪崩
個微服務之間調用的時候,假設微服務A調用微服務B和微服務C,微服務B和微服務C又調用其它的微服務,這就是所謂的“扇出”。如果扇出的某個鏈路上
某個微服務的調用響應過長或者不可用,對微服務A的調用就會占用越來越多的系統資源,進而引起系統崩潰,所謂的雪崩效應。
對於高流量的應用來說,單一的后端依賴可能會導致所有服務器上的所有資源都在幾秒內飽和。比失敗更糟糕的是,這些應用程序還可能導致服務之間的延遲增加,
備份隊列,線程和其它系統資源緊張,導致整個系統發生更多的級聯故障。這些都表示需要對故障和延遲進行隔離和管理,
以便單個依賴關系的失敗,不能取消整個應用程序或系統。
Hystrix是一個用於處理分布式系統的延遲和容錯的開源庫,在分布式系統里,許多依賴不可避免的會調用失敗,比如超時、異常等,
Hystrix能夠保證在一個依賴問題的情況下,不會導致整體服務失敗,避免級聯故障,以提高分布式系統的彈性。
“斷路器”本身是一種開關裝置,當某個服務單元發生故障之后,通過斷路器的故障監控(類似熔斷保險絲),向調用方法返回一個符合預期的、
可處理的備選響應(FallBack),而不是長時間的等帶或者拋出調用方法無法處理的異常,
這樣就保證了服務調用方的線程不會被長時間、不必要的占用,從而避免了故障在分布式系統中的蔓延,乃至雪崩。
服務熔斷
熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。
當扇出鏈路的某個微服務不可用或者響應時間太長時,會進行服務的降級,進而熔斷該節點微服務的調用,舉快速返回“錯誤”的響應信息。
檢測到該節點微服務調用響應正常后恢復調用鏈路。在SpringCloud框架里熔斷機制通過Hystrix實現。Hystrix會監控微服務建調用的情況,
當失敗的調用到一定閾值時,缺省是5秒內20次調用失敗就會啟動熔斷機制。熔斷機制的注解是@HystrixCommand
新建一個項目:
參考8001服務提供者:(這里是重新寫的記錄,由於忘記保存,結果一個opera內存不足,造成了博客園卡死重新加載,一晚上的心血都沒有了,欲哭無淚)
將之前的8001包全都拷貝過來。
首先導入pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_provider_user_hystrix_8001</artifactId> <dependencies> <!-- hystrix --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <!-- 將微服務provider側注冊進eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <!-- 引入自己定義的api通用包,可以使用Dept部門Entity --> <dependency> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- actuator監控信息完善 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
接着修改application.yml,只修改實例名即可:
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud-user datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: #defaultZone: http://localhost:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_hystrix_8001 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_microservicecloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
接着修改控制層,一旦你數據庫里沒有這個id那么就會返回你在注解中所指定的方法或者類:
package com.changping.springcloud.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; 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.RestController; import com.changping.springcloud.entities.User; import com.changping.springcloud.service.UserServiceInf; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; @RestController public class UserController { @Autowired private UserServiceInf userServiceInf; /**使用這個注解后,一旦有空指針異常將會返回你在注解里指定的方法*/ @HystrixCommand(fallbackMethod = "hystrix_Get") @RequestMapping(value="/user/get/{id}",method=RequestMethod.GET) public User get(@PathVariable("id")String userId) { User user = userServiceInf.get(userId); if(null==user) { throw new RuntimeException("該id:"+userId+"找不到你需要的數據"); } return user; } //發生空指針異常時執行以下方法,對應於注解里的方法。 public User hystrix_Get(@PathVariable("id") String userid) { return new User().setUserid(userid).setUsername("該ID:" + userid + "找不到你需要的數據,it returns a null value -- come from @HystrixCommand") .setDb_source("Without this database in MySQL"); } //——————————————————————————————————————————————————————————————————————// //下面就不用hystrix技術了,hystrix技術就是打印個日志,就像spring里的aop技術。 @RequestMapping(value="/user/add",method=RequestMethod.POST) public boolean add(@RequestBody User user) { boolean b = userServiceInf.add(user); return b; } @RequestMapping(value="/user/list",method=RequestMethod.GET) public List<User> list() { List<User> list_user = userServiceInf.list(); return list_user; } @Autowired private DiscoveryClient client; @RequestMapping(value = "/user/discovery", method = RequestMethod.GET) public Object discovery() { List<String> list = client.getServices();//獲得全部的服務名即啟動類上帶有@EnableDiscoveryClient的服務都會被發現 System.out.println("**********" + list); List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD_USER");//注冊中心上的application for (ServiceInstance element : srvList) { System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t" + element.getUri()); } return this.client; } }
接着修改啟動類,添加一個注解,開啟對應的功能:
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient @EnableCircuitBreaker //開啟hystrix功能 public class UserProvider_8001_Hystrix_App { public static void main(String[] args) { SpringApplication.run(UserProvider_8001_Hystrix_App.class, args); } }
接着是測試:
按順序啟動:
通過瀏覽器訪問:
http://localhost/consumer/user/get/001
http://localhost/consumer/user/get/002
http://localhost/consumer/user/get/003
http://localhost/consumer/user/get/004
http://localhost/consumer/user/get/005
可以看到返回的就是自己定義注解fallback指定方法中數據。
沒有問題,這種方式和spring中的aop很像,功能一致,沒有什么特別的。
再看看注冊中心
實例名已經變了。
接着討論服務降級
由於某個系統出現高並發狀態,因此需要將部分服務關閉,待度過難關,再回來重啟。
服務降級處理是在客戶端,而不是服務端。
接着需要考慮一個問題,由於需要異常處理的方法有很多,那么這么多方法都寫出來就會很亂,所以需要把異常處理放到接口中處理。
首先需要修改microservicecloud_api
在service包里繼續添加一個類(需要添加一個注解,放到bean里),該類需要實現FallbackFactory並且要用到泛型才可以,因為通過泛型可以得到需要的方法。
這個類作用是在服務提供者被關閉時可以提示有用的信息:
package com.changping.springcloud.service; import java.util.List; import org.springframework.stereotype.Component; import com.changping.springcloud.entities.User; import feign.hystrix.FallbackFactory; @Component public class UserClientServiceFallbackFactory implements FallbackFactory<UserClientService> { @Override public UserClientService create(Throwable arg0) { return new UserClientService() { @Override public boolean add(User user) { // TODO Auto-generated method stub return false; } @Override public User get(String userId) { return new User().setUserid(userId).setUsername("粗問題了,來自consumer提供的服務降級信息,此刻服務提供者已經關閉,正在維護中,請聯系管理員...").setDb_source("without info in the database"); } @Override public List<User> list() { // TODO Auto-generated method stub return null; } }; } }
接着去UserClientService添加一個注解,告訴它出現異常可以去哪個類里找:
package com.changping.springcloud.service; import java.util.List; import org.springframework.cloud.netflix.feign.FeignClient; 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 com.changping.springcloud.entities.User; //@FeignClient(value="MICROSERVICECLOUD-USER")//應用名,加上服務提供者的方法。 //只要是哪個方法出現類異常的狀態,就會去找fallbackFactory,然后fallbackFacotry會去找它自己的實現類。 @FeignClient(value="MICROSERVICECLOUD-USER",fallbackFactory=UserClientServiceFallbackFactory.class) public interface UserClientService { @RequestMapping(value="/user/add",method=RequestMethod.POST) public boolean add(@RequestBody User user); @RequestMapping(value="/user/get/{id}",method=RequestMethod.GET) public User get(@PathVariable("id")String userId); @RequestMapping(value="/user/list",method=RequestMethod.GET) public List<User> list(); }
修改之后就可以利用run as maven clear、instal ,如果build failed可以刪除D盤工作空間原來的jar包,然后重啟eclipse。
接着update所有的項目。
測試:
按順序啟動:
http://localhost/consumer/user/get/004
http://localhost/consumer/user/get/003
http://localhost/consumer/user/get/002
http://localhost/consumer/user/get/001
http://localhost/consumer/user/get/005(什么都沒有:因為這次不是判斷數據庫里有沒有對應的id,而是服務提供者有沒有被關閉)
現在關閉8001服務提供者:
可以看到自己定義在microservicecloud_api中處理異常類中方法返回提示信息。
不只是在關閉的時候會提示,服務提供者的進程還沒有完全啟動的時候去請求數據也會這樣提示。
犧牲某些這就是所謂的服務降級。而服務熔斷就是出現了異常然后給你一個信息提示然后告訴你不要再訪問了。
總結:
服務熔斷:一般時某個服務或者異常引起,當莫格異常條件被觸發時,直接熔斷整個服務,而不是一直等到此服務超時。
服務降級:一般從整體符合考慮。當某個服務熔斷后,服務器不再被調用,
此時客戶端可以自己准備一個本地的fallback回調,返回一個缺省值。
服務降級雖然使服務水平下降,但相比服務全軍覆沒要強上許多。
服務監控hystrixDashbord
除了隔離依賴服務的調用以外,Hystrix還提供了准實時的調用監控(Hystrix Dashboard),Hystrix會持續地記錄所有
通過Hystrix發起的請求的執行信息,並以統計報表和圖形的形式展示給用戶,包括每秒執行多少請求,多少成功、失敗等。
Netflix通過hystrix-metrics-event-stream項目實現了對以上指標的監控。Spring Cloud也提供了Hystrix Dashboard的整合,
對監控內容轉化成可視界面。
下面我們就來完成對各個服務的監控及其可視化:
1、新建工程microservicecloud_consumer_hystrix_dashboard_9001
結構:
1、首先添加pom依賴:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_consumer_hystrix_dashboard</artifactId> <dependencies> <!-- hystrix和 hystrix-dashboard相關 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> <!-- 自己定義的api --> <dependency> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!-- Ribbon相關 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- feign相關 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> </dependencies> </project>
2、接下來添加並修改application.yml
application.yml
server: port: 9001 #一定要有空格否則報錯
3、新建包,然后新建啟動類:
UserConsumer_DashBoard_App
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; @SpringBootApplication @EnableHystrixDashboard public class UserConsumer_Dashboard_App { public static void main(String [] args) { SpringApplication.run(UserConsumer_Dashboard_App.class);//缺少args,會報錯 } }
去服務提供者8001、8002、8003添加actuator依賴,使之受到EnableHystrixDashboard的監控(之前添加過):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId><!-- 父工程名 --> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_provider_user_8001</artifactId><!-- 當前項目名 --> <dependencies> <!-- 引入microservicecloud_api的jar包--> <dependency> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <!-- actuator監控 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 將微服務provider提供的服務注冊進eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 修改后立即生效,熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
接下來啟動microservicecloud_consumer_hystrix_dashboard_9001:
之后訪問:
http://localhost:9001/hystrix
接着測一下:
http://localhost/consumer/user/get/001
說明8001、8002、8003三個服務提供者都沒有問題:
監控中心由於已經限定了應用的訪問格式:
http://hystrix-app:port/hystrix.stream
所以按它的格式來:
http://localhost:8001/hystrix.stream
報錯:
原來是缺點的東西——args:
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; @SpringBootApplication @EnableHystrixDashboard public class UserConsumer_Dashboard_App { public static void main(String [] args) { SpringApplication.run(UserConsumer_Dashboard_App.class,args); } }
重新測試順序啟動(不按順序也可以,但最好這樣):
再次訪問監控中心:
http://localhost:8001/hystrix.stream
還是報錯:
原來真正的錯誤是我把服務提供者弄錯了,
應該啟動microservicecloud_provider_user_hystrix_8001。
那三個提供者由於沒有hystrix的加持,所以無法被注冊到監控中心。
現在重新啟動如下:
再次請求監控中心:
這次沒有問題了,它會一直ping
沒有消費者訪問的時候它會一直ping,不會產生回調的數據,但是一定有消費者訪問,就會有數據:
http://localhost/consumer/user/get/002
接下來看一些直觀的圖形:
訪問:http://localhost:9001/hystrix
填好數據后可以點擊監控按鈕:
其中的圓點代表並發的壓力。
在我瘋狂的點擊請求服務提供者http://localhost/consumer/user/get/001時:
1:Delay:該參數用來控制服務器上輪詢監控信息的延遲時間,默認為2000毫秒,可以通過配置該屬性來降低客戶端的網路和CPU消耗。
2:Title:該參數對應了頭部標題Hystrix Stream之后的內容,默認會使用具體監控實例的URL,可以通過配置該信息來展示更何合適的標題。
Zuul路由網關:代理、路由、過濾
Zuul包含了對請求的路由和過濾兩個重要的功能:
其中路由功能負責將外部請求轉發到具體的微服務實例上,是實現外部訪問統一入口的基礎而過濾器功能則負責對請求的處理過程進行干預,
是實現請求校驗、服務聚合等功能的基礎。Zuul和Eureka進行整合,將Zuul自身注冊為Eureka服務治理下的應用,
同時從Eureka中獲得其它微服務的消息,也即以后的訪問微服務都是通過Zuul跳轉后獲得。
https://github.com/Netflix/zuul/wiki
獲得源碼的地方:
接下來需要接下來需要新建一個項目:
microservicecloud_zuul_gateway_9527
首先需要導入pom依賴:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_zuul_gateway_9527</artifactId> <dependencies> <!-- zuul路由網關 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <!-- actuator監控 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- hystrix容錯 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- 日常標配 --> <dependency> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 熱部署插件 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
接下來修改application.yml
server: port: 9527 spring: application: name: microservicecloud-zuul-gateway #應用名不能有下划線 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka instance: instance-id: gateway_9527.com #實例名可以有下划線 prefer-ip-address: true info: app.name: changping_microcloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
接着需要新建包和啟動類:
Zuul_9527_StartSpringCoudApp
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy public class Zuul_9527_StartSpringCoudApp { public static void main(String [] args) { SpringApplication.run(Zuul_9527_StartSpringCoudApp.class, args); } }
結構;
接着進行host文件配置:(突然想明白原來可以直接在地址欄里直接進行c、d、e盤的切換,原來自己這么多年走了這么多彎路)
修改一個映射配置:C:\Windows\System32\drivers\etc 下有一個host文件,需要添加映射文件:
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost #映射文件springcloud eureka配置集群時,需要配置的映射文件,即將默認的localhost改成具體的名稱 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com #映射文件springcloud zuul配置網關,application.yml需要配置映射文件,修改與2020/04/15。 127.0.0.1 myzuul.com
接着啟動三個Eureka注冊中心,將Zuul注冊進去:
Zuul和Eureka進行整合,將Zuul自身注冊為Eureka服務治理下的應用,
同時從Eureka中獲得其它微服務的消息,也即以后的訪問微服務都是通過Zuul跳轉后獲得。
測試:分別啟動三個注冊中心和兩個服務:
首先看一下注冊中心的變化:出現了一個新的服務,有它的應用名和實例名。由於8002、8003沒有啟動所以處於down狀態,注冊中心還在保留它們。
通過瀏覽器兩種方式的訪問:
不用路由:http://localhost:8001/user/get/001
使用路由:http://myzuul.com:9527/microservicecloud-user/user/get/001
好了這證明配置起了作用,可以通過這個域名+端口號+應用名來訪問服務。
接下來需要配置一個安全防護,即不暴露自己真實的應用名,也可以訪問:
修改application.yml
server: port: 9527 spring: application: name: microservicecloud-zuul-gateway #應用名不能有下划線 #給自己的應用名起個別名,可以通過別名訪問,而不需要暴露真實應用名 zuul: routes: myuser.serviceId: microservicecloud-user myuser.path: /myuser/** eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka instance: instance-id: gateway_9527.com #實例名可以有下划線 prefer-ip-address: true info: app.name: changping_microcloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
這樣重啟zuul服務,重新定義訪問方式,這樣就可以隱藏具體的應用名了:
http://myzuul.com:9527/myuser/user/get/001
但是這個地址還是可以訪問;
http://myzuul.com:9527/microservicecloud-user/user/get/001
這樣就還不能隱藏具體應用名,還是需要在application.yml里加點料:
ignored-services: microservicecloud-user
server: port: 9527 spring: application: name: microservicecloud-zuul-gateway #應用名不能有下划線 #給自己的應用名起個別名,可以通過別名訪問,而不需要暴露真實應用名 zuul: ignored-services: microservicecloud-user #加上之后就可以隱藏具體的應用名,就無法用它來訪問,而只能通過別名訪問。 routes: myuser.serviceId: microservicecloud-user myuser.path: /myuser/** eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka instance: instance-id: gateway_9527.com #實例名可以有下划線 prefer-ip-address: true info: app.name: changping_microcloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
接着重新啟動服務:
重新訪問:http://myzuul.com:9527/microservicecloud-user/user/get/001
當然如果都不想暴露真實的應用名,就可以通殺:
server: port: 9527 spring: application: name: microservicecloud-zuul-gateway #應用名不能有下划線 zuul: ignored-services: "*" #加"*"之后就可以隱藏所有具體的應用名,就無法用它們來訪問,而只能通過別名訪問。 routes: myuser.serviceId: microservicecloud-user myuser.path: /myuser/** eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka instance: instance-id: gateway_9527.com #實例名可以有下划線 prefer-ip-address: true info: app.name: changping_microcloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
訪問:
這樣就都只能通過真實應用的別名訪問了。
當然為了便於區分具體的應用可以在應用之前加前綴:
server: port: 9527 spring: application: name: microservicecloud-zuul-gateway #應用名不能有下划線 zuul: prefix: /changping #利用zuul給應用名的別名加一個前綴 ignored-services: "*" routes: myuser.serviceId: microservicecloud-user myuser.path: /myuser/** eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka instance: instance-id: gateway_9527.com #實例名可以有下划線 prefer-ip-address: true info: app.name: changping_microcloud company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
重啟microservicecloud_zuul_gateway_9527服務,
在瀏覽器地址欄里重新加一個前綴:
http://myzuul.com:9527/changping/myuser/user/get/001
前綴+應用別名好想法。
SpringCloud_Config分布式配置中心
就目前而言,對於微服務業界並沒有一個統一的、標准的定義(While there is no precise definition of this architectural style)
但通常而言,微服務架構是一種架構模式或者說是一種架構風格,它提倡單一應用程序划分成一組小的服務,每個服務運行在其獨立的自己的進程中,服務之間相互協調、相互配合,
為用戶提供最終價值。服務之間采用輕量級的通信機制互相溝通(通常是基於HTTP的RESTful API)。每個服務都圍繞着具體的業務進行構建,並且能夠被獨立的部署到生產環境、類產生環境等。
另外,應盡量避免統一的、集中式的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構建,可以有一個非常輕量級的集中式的
管理來協調這些服務,可以用不同的語言來編寫服務,也可以使用不同的數據存儲。
SpringCloud Config 為微服務架構中的微服務提供集中化的的外部配置支持,配置服務器為各個不同微服務應用的所有環境提供了一個中心化的外部配置。
SpringCloud Config分為服務端和客戶端兩部分。
微服務意味着要將單體應用中的業務拆分成一個個子服務,每個服務的的粒度相對較小,因此系統中會出現大量的服務。
由於每個服務都需要必要的配置信息才能運行,所以一套集中式的、動態的配置管理設施必不可少。SpringCloud提供了
ConfigServer來解決這個問題,我們每一個微服務自己帶有一個application.yml,成百個配置文件的管理......
SpringCloud Config能做什么:
1、集中管理配置文件
2、同環境不同配置,動態化的配置更新,分環境部署比如dev/test/prod/beta/release
3、運行期間動態調整配置,不再需要在每個服務部署的機器上編寫配置文件,服務會向配置中心統一拉取配置自己的信息
4、當配置文件發生變動時,服務不需要重啟即可感知到配置的變化並應用新的配置
5、將配置信息以REST接口的形式暴露
由於SpringCloud Config 默認使用Git來存儲配置文件(也有其它方式,比如支持SVN和本地文件),
但最推薦的還是Git,而且使用的是http/https訪問的形式。
下面就來做這件事——首先去Github上:(https://github.com/JIDUPINGFANREN/maven_repo——我之前的小測試,沒想到這么快就用到了git
進行SpringCloud Config服務端配置:
1、先去github新建一個項目:
https://github.com/
點擊Start a project:
建一個新的遠程倉庫:名叫microservicecloud_config
之后點擊:
然后復制地址:
2、復制地址可以用於http或者ssh:
https://github.com/JIDUPINGFANREN/microservicecloud_config.git
ssh:
git@github.com:JIDUPINGFANREN/microservicecloud_config.git
3、本地硬盤目錄新建git倉庫並clone
新建一個路徑:
D:\20416\mySpringCloud
打開bush,不需要init,直接按ssh地址克隆:
可以看到一個空倉庫已經出現了:
點進去打開隱藏文件:
執行以下命令(沒什么用就是看一眼)當前不是在.git同級右鍵,是它上一級右鍵,所以沒有master:
去.git同級右鍵進入bash執行命令看看吧:
這次我是真的懂了克隆怎么用了,話說一開始我還git init來着,后來就全都是坑了...
4、在D:\20416\mySpringCloud\microservicecloud_config新建一個文件application.yml:
編輯application.yml並保存為UTF-8格式:
spring: profiles: active: - dev --- spring: profiles: dev application: name: microservicecloud-config-changping-dev #應用名不能有下划線,開發環境 --- spring: profiles: test application: name: microservicecloud-config-changping-test #應用名不能有下划線,測試環境 #必須保存為UTF-8格式,否則,傳到github后與本地項目不兼容
另存為》編碼》utf-8:
接着將該文件上傳到github
注:普及一個小知識:
$ git push origin ——該命令表示,將當前分支推送到origin主機的對應分支,但如果當前分支只有一個追蹤分支,那么主機名可以省略。
$ git push 如果當前分支與多個主機存在追蹤關系,那么這個時候-u選項會指定一個默認主機,這樣后面就可以不加任何參數使用git push。
$ git push -u origin master 上面命令將本地的master分支推送到origin主機,同時指定origin為默認主機,后面就可以不加任何參數使用git push。
不帶任何參數的git push,默認只推送當前分支,這叫做simple方式。此外,還有一種matching方式,會推送所有有對應的遠程分支到本地分支。
Git 2.0版本之前,默認采用matching方法,現在改為默認采用simple方式。

去GitHub:
https://github.com/JIDUPINGFANREN/microservicecloud_config
刷新:
可以看到已經提交到github上。
點開看一下:
以上配通了這一部分:
下面完成這一部分:
6、回到eclipse,還是像之前一樣新建一個maven module:
microservicecloud_config_3344
7、首先添加pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_config_3344</artifactId> <dependencies> <!-- springCloud Config --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!-- 避免Config的Git插件報錯:org/eclipse/jgit/api/TransportConfigCallback --> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> <version>4.10.0.201712302008-r</version> <!--如果聲明版本,可能會發現之前就有了比如更早的版本,此處可以不聲明版本號--> </dependency> <!-- 圖形化監控 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 熔斷 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- 熱部署插件 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
jgit——可以通過java代碼來控制本地倉庫,進行提交、回滾的一些操作,想要具體了解的話,可以參考git權威指南。
8、接着添加application.yml文件:
server: port: 3344 spring: application: name: microservicecloud-config cloud: config: server: git: uri: git@github.com:JIDUPINGFANREN/microservicecloud_config.git #GitHub上面的git倉庫名字,3344端口默認訪問此地址
3344服務啟動后會到github上請求被上傳到上面的applicatio.yml。
9、接下來新建啟動類:Config_3344_StartSpringCloudApp
pom里每新出現一個組件,就需要在啟動類上配置一個新注解。
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; @SpringBootApplication @EnableConfigServer public class Config_3344_StartSpringCloudApp { public static void main(String [] args) { SpringApplication.run(Config_3344_StartSpringCloudApp.class, args); } }
10、修改一個映射配置:
C:\Windows\System32\drivers\etc 下有一個host文件,需要添加映射文件:
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost #映射文件springcloud eureka配置集群時,需要配置的映射文件,即將默認的localhost改成具體的名稱 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com #映射文件springcloud zuul配置網關,application.yml需要配置映射文件,修改於2020/04/15。 127.0.0.1 myzuul.com #映射文件springcloud config配置文件時需要這個映射,它相當於localhost,修改於2020/04/16。 127.0.0.1 config_3344.com
11、測試是否可以通過服務3344獲取github上內容;
啟動微服務3344:
http://config_3344.com:3344/application-dev.yml
http://config_3344.com:3344/application-test.yml
http://config_3344.com:3344/application-xxx.yml(不存在)
首先訪問:
http://config_3344.com:3344/application-dev.yml
此時出現了異常:
17:36:54.805 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 17:36:54.811 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 17:36:54.811 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_config_3344/target/classes/] 2020-04-16 17:36:57.721 INFO 31404 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@53da115b: startup date [Thu Apr 16 17:36:57 CST 2020]; root of context hierarchy 2020-04-16 17:36:58.524 INFO 31404 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-16 17:36:58.625 INFO 31404 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$f71cf96f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-16 17:37:00.270 INFO 31404 --- [ restartedMain] c.c.s.Config_3344_StartSpringCloudApp : No active profile set, falling back to default profiles: default 2020-04-16 17:37:00.306 INFO 31404 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@57c73bd0: startup date [Thu Apr 16 17:37:00 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@53da115b 2020-04-16 17:37:02.929 INFO 31404 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=a750bed7-4ae0-3f6b-9383-a1733e94d0b5 2020-04-16 17:37:02.965 INFO 31404 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-16 17:37:03.145 INFO 31404 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$d2f9cb3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-16 17:37:03.285 INFO 31404 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$f71cf96f] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-16 17:37:03.611 INFO 31404 --- [ restartedMain] org.eclipse.jetty.util.log : Logging initialized @11025ms to org.eclipse.jetty.util.log.Slf4jLog 2020-04-16 17:37:04.053 INFO 31404 --- [ restartedMain] e.j.JettyEmbeddedServletContainerFactory : Server initialized with port: 3344 2020-04-16 17:37:04.057 INFO 31404 --- [ restartedMain] org.eclipse.jetty.server.Server : jetty-9.4.7.v20170914 2020-04-16 17:37:04.282 INFO 31404 --- [ restartedMain] org.eclipse.jetty.server.session : DefaultSessionIdManager workerName=node0 2020-04-16 17:37:04.283 INFO 31404 --- [ restartedMain] org.eclipse.jetty.server.session : No SessionScavenger set, using defaults 2020-04-16 17:37:04.286 INFO 31404 --- [ restartedMain] org.eclipse.jetty.server.session : Scavenging every 660000ms 2020-04-16 17:37:04.295 INFO 31404 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring embedded WebApplicationContext 2020-04-16 17:37:04.296 INFO 31404 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3989 ms 2020-04-16 17:37:04.783 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-16 17:37:04.788 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-16 17:37:04.789 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-16 17:37:04.789 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-16 17:37:04.789 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-16 17:37:04.790 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-16 17:37:04.790 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestLoggingFilter' to: [/*] 2020-04-16 17:37:04.790 INFO 31404 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-16 17:37:04.798 INFO 31404 --- [ restartedMain] o.e.jetty.server.handler.ContextHandler : Started o.s.b.c.e.j.JettyEmbeddedWebAppContext@43822b60{/,[file:///C:/Users/YZ/AppData/Local/Temp/jetty-docbase.6942963982531134574.3344/],AVAILABLE} 2020-04-16 17:37:04.799 INFO 31404 --- [ restartedMain] org.eclipse.jetty.server.Server : Started @12216ms 2020-04-16 17:37:05.690 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@57c73bd0: startup date [Thu Apr 16 17:37:00 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@53da115b 2020-04-16 17:37:05.919 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-16 17:37:05.921 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-16 17:37:05.936 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/encrypt],methods=[POST]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.encrypt(java.lang.String,org.springframework.http.MediaType) 2020-04-16 17:37:05.937 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/encrypt/{name}/{profiles}],methods=[POST]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.encrypt(java.lang.String,java.lang.String,java.lang.String,org.springframework.http.MediaType) 2020-04-16 17:37:05.937 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/decrypt/{name}/{profiles}],methods=[POST]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.decrypt(java.lang.String,java.lang.String,java.lang.String,org.springframework.http.MediaType) 2020-04-16 17:37:05.938 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/decrypt],methods=[POST]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.decrypt(java.lang.String,org.springframework.http.MediaType) 2020-04-16 17:37:05.939 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/encrypt/status],methods=[GET]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.config.server.encryption.EncryptionController.status() 2020-04-16 17:37:05.939 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/key],methods=[GET]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.getPublicKey() 2020-04-16 17:37:05.940 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/key/{name}/{profiles}],methods=[GET]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.getPublicKey(java.lang.String,java.lang.String) 2020-04-16 17:37:05.952 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{name}-{profiles}.properties],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> org.springframework.cloud.config.server.environment.EnvironmentController.properties(java.lang.String,java.lang.String,boolean) throws java.io.IOException 2020-04-16 17:37:05.953 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{name}-{profiles}.yml || /{name}-{profiles}.yaml],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> org.springframework.cloud.config.server.environment.EnvironmentController.yaml(java.lang.String,java.lang.String,boolean) throws java.lang.Exception 2020-04-16 17:37:05.954 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{name}/{profiles:.*[^-].*}],methods=[GET]}" onto public org.springframework.cloud.config.environment.Environment org.springframework.cloud.config.server.environment.EnvironmentController.defaultLabel(java.lang.String,java.lang.String) 2020-04-16 17:37:05.954 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{name}/{profiles}/{label:.*}],methods=[GET]}" onto public org.springframework.cloud.config.environment.Environment org.springframework.cloud.config.server.environment.EnvironmentController.labelled(java.lang.String,java.lang.String,java.lang.String) 2020-04-16 17:37:05.955 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{label}/{name}-{profiles}.yml || /{label}/{name}-{profiles}.yaml],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> org.springframework.cloud.config.server.environment.EnvironmentController.labelledYaml(java.lang.String,java.lang.String,java.lang.String,boolean) throws java.lang.Exception 2020-04-16 17:37:05.956 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{name}-{profiles}.json],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> org.springframework.cloud.config.server.environment.EnvironmentController.jsonProperties(java.lang.String,java.lang.String,boolean) throws java.lang.Exception 2020-04-16 17:37:05.956 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{label}/{name}-{profiles}.json],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> org.springframework.cloud.config.server.environment.EnvironmentController.labelledJsonProperties(java.lang.String,java.lang.String,java.lang.String,boolean) throws java.lang.Exception 2020-04-16 17:37:05.957 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{label}/{name}-{profiles}.properties],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> org.springframework.cloud.config.server.environment.EnvironmentController.labelledProperties(java.lang.String,java.lang.String,java.lang.String,boolean) throws java.io.IOException 2020-04-16 17:37:05.963 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{name}/{profile}/{label}/**],methods=[GET]}" onto public java.lang.String org.springframework.cloud.config.server.resource.ResourceController.retrieve(java.lang.String,java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest,boolean) throws java.io.IOException 2020-04-16 17:37:05.963 INFO 31404 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/{name}/{profile}/{label}/**],methods=[GET],produces=[application/octet-stream]}" onto public synchronized byte[] org.springframework.cloud.config.server.resource.ResourceController.binary(java.lang.String,java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest) throws java.io.IOException 2020-04-16 17:37:06.045 INFO 31404 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-16 17:37:06.045 INFO 31404 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-16 17:37:06.169 INFO 31404 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-16 17:37:07.329 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke() 2020-04-16 17:37:07.330 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.331 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/pause || /pause.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-16 17:37:07.332 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/resume || /resume.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-16 17:37:07.333 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.334 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.336 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2020-04-16 17:37:07.337 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.338 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.339 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/features || /features.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.341 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/archaius || /archaius.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.343 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2020-04-16 17:37:07.343 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.345 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2020-04-16 17:37:07.347 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2020-04-16 17:37:07.349 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2020-04-16 17:37:07.349 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.350 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.352 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2020-04-16 17:37:07.352 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.353 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2020-04-16 17:37:07.354 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-16 17:37:07.355 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>) 2020-04-16 17:37:07.356 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/reset],methods=[POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.reset() 2020-04-16 17:37:07.357 INFO 31404 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/refresh || /refresh.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-16 17:37:07.648 INFO 31404 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2020-04-16 17:37:09.786 INFO 31404 --- [ restartedMain] o.s.cloud.commons.util.InetUtils : Cannot determine local hostname 2020-04-16 17:37:10.057 WARN 31404 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-16 17:37:10.058 INFO 31404 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-16 17:37:10.068 WARN 31404 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-16 17:37:10.068 INFO 31404 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-16 17:37:10.224 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-16 17:37:10.237 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-16 17:37:10.240 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-16 17:37:10.241 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshEndpoint' has been autodetected for JMX exposure 2020-04-16 17:37:10.242 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'restartEndpoint' has been autodetected for JMX exposure 2020-04-16 17:37:10.244 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-16 17:37:10.248 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-16 17:37:10.269 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'restartEndpoint': registering with JMX server as MBean [org.springframework.cloud.context.restart:name=restartEndpoint,type=RestartEndpoint] 2020-04-16 17:37:10.295 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-16 17:37:10.313 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=57c73bd0,type=ConfigurationPropertiesRebinder] 2020-04-16 17:37:10.327 INFO 31404 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.endpoint:name=refreshEndpoint,type=RefreshEndpoint] 2020-04-16 17:37:10.574 INFO 31404 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-16 17:37:10.690 INFO 31404 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-16 17:37:10.692 INFO 31404 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-16 17:37:10.722 INFO 31404 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 30 ms 2020-04-16 17:37:10.774 INFO 31404 --- [ restartedMain] o.e.jetty.server.AbstractConnector : Started ServerConnector@562fcb04{HTTP/1.1,[http/1.1]}{0.0.0.0:3344} 2020-04-16 17:37:10.775 INFO 31404 --- [ restartedMain] .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 3344 (http/1.1) 2020-04-16 17:37:10.783 INFO 31404 --- [ restartedMain] c.c.s.Config_3344_StartSpringCloudApp : Started Config_3344_StartSpringCloudApp in 15.932 seconds (JVM running for 18.2) 2020-04-16 17:38:07.907 WARN 31404 --- [qtp454917896-24] org.eclipse.jetty.server.HttpChannel : /application-dev.yml org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Cannot clone or checkout repository at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) ~[javax.servlet-api-3.1.0.jar:3.1.0] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[javax.servlet-api-3.1.0.jar:3.1.0] at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:206) ~[websocket-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110) ~[spring-boot-actuator-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106) ~[spring-boot-actuator-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) ~[jetty-security-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) ~[jetty-servlet-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.Server.handle(Server.java:561) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:334) ~[jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251) [jetty-server-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) [jetty-io-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:104) [jetty-io-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) [jetty-io-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:679) [jetty-util-9.4.7.v20170914.jar:9.4.7.v20170914] at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:597) [jetty-util-9.4.7.v20170914.jar:9.4.7.v20170914] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172] Caused by: java.lang.IllegalStateException: Cannot clone or checkout repository at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.refresh(JGitEnvironmentRepository.java:217) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.getLocations(JGitEnvironmentRepository.java:169) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.getLocations(MultipleJGitEnvironmentRepository.java:146) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.AbstractScmEnvironmentRepository.findOne(AbstractScmEnvironmentRepository.java:42) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.findOne(MultipleJGitEnvironmentRepository.java:186) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.CompositeEnvironmentRepository.findOne(CompositeEnvironmentRepository.java:45) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.EnvironmentEncryptorEnvironmentRepository.findOne(EnvironmentEncryptorEnvironmentRepository.java:53) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.EnvironmentController.labelled(EnvironmentController.java:106) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.EnvironmentController.labelledYaml(EnvironmentController.java:184) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.EnvironmentController.yaml(EnvironmentController.java:174) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.13.RELEASE.jar:4.3.13.RELEASE] ... 53 common frames omitted Caused by: org.eclipse.jgit.api.errors.TransportException: git@github.com:JIDUPINGFANREN/microservicecloud_config.git: Auth fail at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:248) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:306) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:200) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.cloneToBasedir(JGitEnvironmentRepository.java:414) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.copyRepository(JGitEnvironmentRepository.java:389) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.createGitClient(JGitEnvironmentRepository.java:374) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.refresh(JGitEnvironmentRepository.java:191) ~[spring-cloud-config-server-1.3.1.RELEASE.jar:1.3.1.RELEASE] ... 75 common frames omitted Caused by: org.eclipse.jgit.errors.TransportException: git@github.com:JIDUPINGFANREN/microservicecloud_config.git: Auth fail at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:172) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:140) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:280) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:170) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:137) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:123) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1269) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:237) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] ... 81 common frames omitted Caused by: com.jcraft.jsch.JSchException: Auth fail at com.jcraft.jsch.Session.connect(Session.java:519) ~[jsch-0.1.54.jar:na] at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:126) ~[org.eclipse.jgit-4.10.0.201712302008-r.jar:4.10.0.201712302008-r] ... 88 common frames omitted
認證失敗了。
解決方法:將ssh方式改成http方式;
server: port: 3344 spring: application: name: microservicecloud-config cloud: config: server: git: uri: https://github.com/JIDUPINGFANREN/microservicecloud_config.git #GitHub上面的git倉庫名字,3344默認訪問此地址
http://config_3344.com:3344/application-dev.yml
可以看到當前返回的時dev環境。
接着訪問:http://config_3344.com:3344/application-test.yml
可以看到當前返回的時test環境。
接着訪問:http://config_3344.com:3344/application-xxx.yml
這樣就什么都不返回。
到目前為止成功實現了用SpringCloud Config通過GitHubH獲取配置信息。
主要的流程就是先通過git bash將配置文件上傳到github,然后再通過eclipse訪問。
除了通過yml來進行配置以外還可以進行以下方式,也可以通過config來從遠程倉庫獲取:
The HTTP service has resources in the form:
/{application}/{profile}[/{lable}]
/{application}-{profile}.yml
/{lable}/{application}-{profile}.yml
/{application}-{profile}.properties
/{lable}/{application}-{profile}.properties
進行SpringCloud Config客戶端配置:
1、接着在D盤接着建一個文件:
D:\20416\mySpringCloud\microservicecloud_config
命名為:
microservicecloud_config_client.yml
內容為:
spring: profiles: active: - dev --- server: port: 8201 spring: profiles: dev application: name: microservicecloud-config-client eureka: client: service-url: defaultZone: http://eureka-dev.com:7001/eureka/ --- server: port: 8202 spring: profiles: test application: name: microservicecloud-config-client eureka: client: service-url: defaultZone: http://eureka-test.com:7001/eureka/ #必須以utf-8編碼保存
2、接着使用gitbash提交:
可以看到已經提交:
可以看到github:
接着打開可以看到內容:
3、新建microservicecloud_config_client_3355
4、導pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_config_client_3355</artifactId> <dependencies> <!-- SpringCloud Config客戶端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
5、之后建一個bootstrap.yml
spring: cloud: config: name: microservicecloud-config-client #需要從github上讀取的資源名稱,注意沒有yml后綴名 profile: test #本次訪問的配置項 label: master uri: http://config-3344.com:3344 #本微服務啟動后先去找3344號服務,通過SpringCloudConfig獲取GitHub的服務地址
6、接着配置application.yml
spring:
application:
name: microservicecloud-config-client
當前結構;
注:
application.yml是用戶級別的資源配置項
bootstrap.yml是系統統級,優先級更高
Spring Cloud會創建一個Bootstrap Contest,作為Spring應用的Application Context的父上下文。
初始化的時候,bootstrap Context負責從外部源加載配置屬性並解析屬性配置。這兩個上下文共享一個從外部獲取的Environment。
Bootstrap屬性有高優先級,默認情況下,它們不會被本地配置覆蓋。bootstrap context和Application Context有着不同的約定,
所以新增了一個bootstrap.yml文件,保證Bootstrap Context和Application Context配置的分離。
現在客戶端可以連上服務端,服務端可以連github,這樣就穿起一條線
7、配置文件映射;
添加一個映射配置:C:\Windows\System32\drivers\etc 下有一個host文件,需要添加映射文件:
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost #映射文件springcloud eureka配置集群時,需要配置的映射文件,即將默認的localhost改成具體的名稱 127.0.0.1 eureka7001.com 127.0.0.1 eureka7002.com 127.0.0.1 eureka7003.com #映射文件springcloud zuul配置網關,application.yml需要配置映射文件,修改於2020/04/15。 127.0.0.1 myzuul.com #映射文件springcloud config配置文件時需要這個映射,修改於2020/04/16。 127.0.0.1 config_3344.com #映射文件springcloud config配置文件時需要這個映射,配置客戶端,這些映射可以通用,都只是個別名。 127.0.0.1 client_config.com
新建一個包和類:ConfigClientRest
ConfigClientRest.java這個類讀取的時服務端的配置文件,並打印相關信息。
package com.changping.springcloud; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ConfigClientRest { @Value("${spring.application.name}") private String applicationName; @Value("${eureka.client.service-url.defaultZone}") private String eurekaServers; @Value("${server.port}") private String port; @RequestMapping("/config") public String getConfig() { String str = "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port; System.out.println("******str: " + str); return "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port; } }
新建啟動類:ConfigClient_3355_StartSpringCloudApp
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ConfigClient_3355_StartSpringCloudApp { public static void main(String[] args) { SpringApplication.run(ConfigClient_3355_StartSpringCloudApp.class, args); } }
測試
啟動Config配置中心3344微服務並測試:http://config_3344.com:3344/application-dep.yml
啟動3355作為Client准備訪問
報錯了;
11:04:36.148 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 11:04:36.153 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 11:04:36.154 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_config_client_3355/target/classes/] 2020-04-17 11:04:38.232 INFO 38376 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@254f4dd8: startup date [Fri Apr 17 11:04:38 CST 2020]; root of context hierarchy 2020-04-17 11:04:38.977 INFO 38376 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 11:04:39.054 INFO 38376 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$aa061b82] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-17 11:04:41.129 INFO 38376 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://config_3344.com:3344 2020-04-17 11:04:42.625 INFO 38376 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=microservicecloud-config-client, profiles=[dev], label=master, version=null, state=null 2020-04-17 11:04:42.670 INFO 38376 --- [ restartedMain] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml#dev'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml'}]] 2020-04-17 11:04:42.734 INFO 38376 --- [ restartedMain] .s.ConfigClient_3355_StartSpringCloudApp : No active profile set, falling back to default profiles: default 2020-04-17 11:04:42.814 INFO 38376 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@39897f67: startup date [Fri Apr 17 11:04:42 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@254f4dd8 2020-04-17 11:04:45.109 INFO 38376 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=0cccb300-e2a8-3ec5-a4da-2181b6f0fb02 2020-04-17 11:04:45.133 INFO 38376 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 11:04:45.357 INFO 38376 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$c018bec6] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 11:04:45.537 INFO 38376 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$aa061b82] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 11:04:45.892 INFO 38376 --- [ restartedMain] org.eclipse.jetty.util.log : Logging initialized @19294ms to org.eclipse.jetty.util.log.Slf4jLog 2020-04-17 11:04:46.429 INFO 38376 --- [ restartedMain] e.j.JettyEmbeddedServletContainerFactory : Server initialized with port: 8080 2020-04-17 11:04:46.433 INFO 38376 --- [ restartedMain] org.eclipse.jetty.server.Server : jetty-9.4.7.v20170914 2020-04-17 11:04:46.812 INFO 38376 --- [ restartedMain] org.eclipse.jetty.server.session : DefaultSessionIdManager workerName=node0 2020-04-17 11:04:46.812 INFO 38376 --- [ restartedMain] org.eclipse.jetty.server.session : No SessionScavenger set, using defaults 2020-04-17 11:04:46.814 INFO 38376 --- [ restartedMain] org.eclipse.jetty.server.session : Scavenging every 600000ms 2020-04-17 11:04:46.822 INFO 38376 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring embedded WebApplicationContext 2020-04-17 11:04:46.823 INFO 38376 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4009 ms 2020-04-17 11:04:47.220 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-17 11:04:47.224 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-17 11:04:47.224 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-17 11:04:47.224 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-17 11:04:47.225 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-17 11:04:47.225 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-17 11:04:47.225 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestLoggingFilter' to: [/*] 2020-04-17 11:04:47.225 INFO 38376 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-17 11:04:47.233 INFO 38376 --- [ restartedMain] o.e.jetty.server.handler.ContextHandler : Started o.s.b.c.e.j.JettyEmbeddedWebAppContext@684e1604{/,[file:///C:/Users/YZ/AppData/Local/Temp/jetty-docbase.4981694137428585858.8080/],AVAILABLE} 2020-04-17 11:04:47.234 INFO 38376 --- [ restartedMain] org.eclipse.jetty.server.Server : Started @20639ms 2020-04-17 11:04:47.255 WARN 38376 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configClientRest': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}" 2020-04-17 11:04:47.259 INFO 38376 --- [ restartedMain] org.eclipse.jetty.server.session : Stopped scavenging 2020-04-17 11:04:47.263 INFO 38376 --- [ restartedMain] o.e.jetty.server.handler.ContextHandler : Stopped o.s.b.c.e.j.JettyEmbeddedWebAppContext@684e1604{/,[file:///C:/Users/YZ/AppData/Local/Temp/jetty-docbase.4981694137428585858.8080/],UNAVAILABLE} 2020-04-17 11:04:47.287 INFO 38376 --- [ restartedMain] utoConfigurationReportLoggingInitializer : Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2020-04-17 11:04:47.300 ERROR 38376 --- [ restartedMain] o.s.boot.SpringApplication : Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configClientRest': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}" at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at com.changping.springcloud.ConfigClient_3355_StartSpringCloudApp.main(ConfigClient_3355_StartSpringCloudApp.java:10) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.5.9.RELEASE.jar:1.5.9.RELEASE] Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}" at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] ... 22 common frames omitted
原因是:github上客戶端yml配置文件名,與eclipse上的yml里應用名不一致,而不是下划線不能用,主要是ml里應用名是“-”。
git add .
git commit -m "將下划線修改為-"
git push origin master
現在github:
重新啟動microservicecloud_config_client_3355:
14:34:51.233 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 14:34:51.239 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 14:34:51.240 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud_config_client_3355/target/classes/] 2020-04-17 14:34:53.148 INFO 26868 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ee66a1d: startup date [Fri Apr 17 14:34:53 CST 2020]; root of context hierarchy 2020-04-17 14:34:53.889 INFO 26868 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 14:34:53.998 INFO 26868 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$efd0a451] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-17 14:34:55.617 INFO 26868 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://config_3344.com:3344 2020-04-17 14:35:02.940 INFO 26868 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=microservicecloud-config-client, profiles=[dev], label=master, version=null, state=null 2020-04-17 14:35:02.951 INFO 26868 --- [ restartedMain] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/microservicecloud-config-client.yml#dev'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml#dev'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/microservicecloud-config-client.yml'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml'}]] 2020-04-17 14:35:02.997 INFO 26868 --- [ restartedMain] .s.ConfigClient_3355_StartSpringCloudApp : No active profile set, falling back to default profiles: default 2020-04-17 14:35:03.187 INFO 26868 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@d0be5a2: startup date [Fri Apr 17 14:35:03 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@ee66a1d 2020-04-17 14:35:05.609 INFO 26868 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=0cccb300-e2a8-3ec5-a4da-2181b6f0fb02 2020-04-17 14:35:05.637 INFO 26868 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 14:35:05.991 INFO 26868 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$5e34795] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 14:35:06.141 INFO 26868 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$efd0a451] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 14:35:06.454 INFO 26868 --- [ restartedMain] org.eclipse.jetty.util.log : Logging initialized @17376ms to org.eclipse.jetty.util.log.Slf4jLog 2020-04-17 14:35:06.904 INFO 26868 --- [ restartedMain] e.j.JettyEmbeddedServletContainerFactory : Server initialized with port: 8201 2020-04-17 14:35:06.908 INFO 26868 --- [ restartedMain] org.eclipse.jetty.server.Server : jetty-9.4.7.v20170914 2020-04-17 14:35:07.277 INFO 26868 --- [ restartedMain] org.eclipse.jetty.server.session : DefaultSessionIdManager workerName=node0 2020-04-17 14:35:07.277 INFO 26868 --- [ restartedMain] org.eclipse.jetty.server.session : No SessionScavenger set, using defaults 2020-04-17 14:35:07.279 INFO 26868 --- [ restartedMain] org.eclipse.jetty.server.session : Scavenging every 660000ms 2020-04-17 14:35:07.286 INFO 26868 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring embedded WebApplicationContext 2020-04-17 14:35:07.286 INFO 26868 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4099 ms 2020-04-17 14:35:07.650 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-17 14:35:07.654 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-17 14:35:07.654 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-17 14:35:07.654 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-17 14:35:07.654 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-17 14:35:07.654 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-17 14:35:07.654 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestLoggingFilter' to: [/*] 2020-04-17 14:35:07.655 INFO 26868 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-17 14:35:07.660 INFO 26868 --- [ restartedMain] o.e.jetty.server.handler.ContextHandler : Started o.s.b.c.e.j.JettyEmbeddedWebAppContext@497c7487{/,[file:///C:/Users/YZ/AppData/Local/Temp/jetty-docbase.7154871766262987173.8201/],AVAILABLE} 2020-04-17 14:35:07.661 INFO 26868 --- [ restartedMain] org.eclipse.jetty.server.Server : Started @18586ms 2020-04-17 14:35:08.456 INFO 26868 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@d0be5a2: startup date [Fri Apr 17 14:35:03 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@ee66a1d 2020-04-17 14:35:08.699 INFO 26868 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/config]}" onto public java.lang.String com.changping.springcloud.rest.ConfigClientRest.getConfig() 2020-04-17 14:35:08.705 INFO 26868 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-17 14:35:08.706 INFO 26868 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-17 14:35:08.805 INFO 26868 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-17 14:35:08.806 INFO 26868 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-17 14:35:08.905 INFO 26868 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-17 14:35:09.938 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2020-04-17 14:35:09.940 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2020-04-17 14:35:09.943 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.944 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.945 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/resume || /resume.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-17 14:35:09.947 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/refresh || /refresh.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-17 14:35:09.948 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.949 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.951 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.957 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2020-04-17 14:35:09.958 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.960 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke() 2020-04-17 14:35:09.961 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/archaius || /archaius.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.963 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/features || /features.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.964 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2020-04-17 14:35:09.965 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.966 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>) 2020-04-17 14:35:09.967 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/reset],methods=[POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.reset() 2020-04-17 14:35:09.971 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2020-04-17 14:35:09.972 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2020-04-17 14:35:09.973 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.975 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2020-04-17 14:35:09.976 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.977 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 14:35:09.980 INFO 26868 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/pause || /pause.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-17 14:35:10.214 WARN 26868 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server 2020-04-17 14:35:11.624 WARN 26868 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-17 14:35:11.624 INFO 26868 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-17 14:35:11.637 WARN 26868 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-17 14:35:11.637 INFO 26868 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-17 14:35:11.814 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-17 14:35:11.830 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-17 14:35:11.833 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-17 14:35:11.835 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshEndpoint' has been autodetected for JMX exposure 2020-04-17 14:35:11.836 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'restartEndpoint' has been autodetected for JMX exposure 2020-04-17 14:35:11.838 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-17 14:35:11.842 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-17 14:35:11.864 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'restartEndpoint': registering with JMX server as MBean [org.springframework.cloud.context.restart:name=restartEndpoint,type=RestartEndpoint] 2020-04-17 14:35:11.885 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-17 14:35:11.906 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=d0be5a2,type=ConfigurationPropertiesRebinder] 2020-04-17 14:35:11.919 INFO 26868 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.endpoint:name=refreshEndpoint,type=RefreshEndpoint] 2020-04-17 14:35:12.230 INFO 26868 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-17 14:35:12.350 INFO 26868 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-17 14:35:12.350 INFO 26868 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-17 14:35:12.385 INFO 26868 --- [ restartedMain] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 35 ms 2020-04-17 14:35:12.447 INFO 26868 --- [ restartedMain] o.e.jetty.server.AbstractConnector : Started ServerConnector@8aa91ef{HTTP/1.1,[http/1.1]}{0.0.0.0:8201} 2020-04-17 14:35:12.448 INFO 26868 --- [ restartedMain] .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 8201 (http/1.1) 2020-04-17 14:35:12.457 INFO 26868 --- [ restartedMain] .s.ConfigClient_3355_StartSpringCloudApp : Started ConfigClient_3355_StartSpringCloudApp in 21.151 seconds (JVM running for 23.381) ******str: applicationName: microservicecloud-config-client eurekaServers:http://eureka-dev.com:7001/eureka/ port: 8201
沒有報錯,可以看到端口號。
繼續訪問:
沒有問題,切換為test環境;
bootstrap.yml:
spring: cloud: config: name: microservicecloud-config-client #需要從github上讀取的資源名稱,注意沒有yml后綴名 profile: test #本次訪問的配置項,上次是dev label: master uri: http://config_3344.com:3344 #本微服務啟動后先去找3344號服務,通過SpringCloudConfig獲取GitHub的服務地址
重啟客戶端3355,重新訪問;
bootstrap.yml里面的profile值是什么,決定從github上讀取什么。
SpringCloud_Config配置實戰
Config服務端配置通過,可以和config+github進行配置修改獲得內容。
此時可以做一個eureka服務+一個user訪問的微服務,將兩個微服務的配置統一由github獲得實現統一配置,分布式管理,完成多環境的變更。
開始:
1、接着在D:\20416\mySpringCloud\microservicecloud_config新建兩個文件:
microservicecloud-config-eureka-client.yml(單機注冊中心)
spring: profiles: active: - dev --- server: port: 7001 spring: profiles: dev application: name: microservicecloud-eureka-config-client eureka: instance: hostname: eureka7001.com client: register-with-eureka: false fetch-register: false service-url: defaultZone: http://eureka7001.com:7001/eureka/ --- server: port: 7001 spring: profiles: test application: name: microservicecloud-eureka-config-client
eureka: instance: hostname: eureka7001.com client: register-with-eureka: false fetch-register: false service-url: defaultZone: http://eureka7001.com:7001/eureka/ #必須以utf-8編碼保存
microservicecloud-config-user-client.yml(單機服務提供者)
spring: #github client修改1 profiles: active: - dev --- server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: microservicecloud-user-config-client #github client修改2 datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 # 數據庫名稱 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://eureka7001.com:7001/eureka/ #github client修改3 #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_client_8001 #github client修改4 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_client_microservicecloud #github client修改5 company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
現在有兩個文件有待於提交了;
提交add;
commit之后:
最后push,流程如下;
github:
看來通過*來add注釋一樣。
忘記添加測試環境了,重新提交一下吧。
microservicecloud-config-user-client.yml(單機服務提供者,添加測試環境)
spring: #github client修改1 profiles: active: - dev --- ###########################dev開發環境############################## server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: profiles: dev #github client修改2 application: name: microservicecloud-user-config-dev-client #github client修改3 datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 #github client修改4 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://eureka7001.com:7001/eureka/ #github client修改5 #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_client_8001 #github client修改6 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_client_microservicecloud #github client修改7 company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$ --- ###########################test測試環境############################## server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: profiles: test #github client修改2 application: name: microservicecloud-user-config-test-client #github client修改3 datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0326 #github client修改4 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://eureka7001.com:7001/eureka/ #github client修改5 #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_client_8001 #github client修改6 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_client_microservicecloud #github client修改7 company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
重新提交到github;
github:
接着新建工程:
microservicecloud-eureka-config-client-7001
pom文件從3355粘:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud-eureka-config-client-7001</artifactId> <dependencies> <!-- SpringCloud Config客戶端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
新建兩個yml配置文件從3355粘:
bootstrap.yml:
spring: cloud: config: name: microservicecloud-eureka-config-client #在原來基礎上添加eureka
profile: dev #本次訪問的配置項 label: master uri: http://config_3344.com:3344 #本微服務啟動后先去找3344號服務,通過SpringCloudConfig獲取GitHub的服務地址
application.yml
spring: application: name: microservicecloud-eureka-config-client
新與github建立連接的配置文件類、啟動類(從3355粘並重新命名)
結構:
測試:首先啟動3344最終要用於建立通信
http://config_3344.com:3344/application-dev.yml
啟動時報錯:
17:15:06.505 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 17:15:06.509 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 17:15:06.510 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud-eureka-config-client-7001/target/classes/] 2020-04-17 17:15:09.621 INFO 39176 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ee66a1d: startup date [Fri Apr 17 17:15:09 CST 2020]; root of context hierarchy 2020-04-17 17:15:10.376 INFO 39176 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 17:15:10.452 INFO 39176 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$efd0a451] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-17 17:15:12.523 INFO 39176 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://config_3344.com:3344 2020-04-17 17:15:21.576 INFO 39176 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=microservicecloud-eureka-config-client, profiles=[dev], label=master, version=null, state=null 2020-04-17 17:15:21.579 INFO 39176 --- [ restartedMain] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml#dev'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml'}]] 2020-04-17 17:15:21.603 INFO 39176 --- [ restartedMain] ka_ConfigClient_StartSpringCloud_7001App : No active profile set, falling back to default profiles: default 2020-04-17 17:15:21.673 INFO 39176 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@d0be5a2: startup date [Fri Apr 17 17:15:21 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@ee66a1d 2020-04-17 17:15:24.258 INFO 39176 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=973f3262-724b-3095-9911-c2a798c1fa41 2020-04-17 17:15:24.281 INFO 39176 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 17:15:24.527 INFO 39176 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$5e34795] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 17:15:24.692 INFO 39176 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$efd0a451] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 17:15:25.041 INFO 39176 --- [ restartedMain] org.eclipse.jetty.util.log : Logging initialized @20965ms to org.eclipse.jetty.util.log.Slf4jLog 2020-04-17 17:15:25.499 INFO 39176 --- [ restartedMain] e.j.JettyEmbeddedServletContainerFactory : Server initialized with port: 8080 2020-04-17 17:15:25.502 INFO 39176 --- [ restartedMain] org.eclipse.jetty.server.Server : jetty-9.4.7.v20170914 2020-04-17 17:15:25.910 INFO 39176 --- [ restartedMain] org.eclipse.jetty.server.session : DefaultSessionIdManager workerName=node0 2020-04-17 17:15:25.910 INFO 39176 --- [ restartedMain] org.eclipse.jetty.server.session : No SessionScavenger set, using defaults 2020-04-17 17:15:25.913 INFO 39176 --- [ restartedMain] org.eclipse.jetty.server.session : Scavenging every 600000ms 2020-04-17 17:15:25.921 INFO 39176 --- [ restartedMain] o.e.j.s.h.ContextHandler.application : Initializing Spring embedded WebApplicationContext 2020-04-17 17:15:25.922 INFO 39176 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4249 ms 2020-04-17 17:15:26.347 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-17 17:15:26.351 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-17 17:15:26.351 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-17 17:15:26.352 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-17 17:15:26.352 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-17 17:15:26.352 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-17 17:15:26.352 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestLoggingFilter' to: [/*] 2020-04-17 17:15:26.352 INFO 39176 --- [ restartedMain] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-17 17:15:26.359 INFO 39176 --- [ restartedMain] o.e.jetty.server.handler.ContextHandler : Started o.s.b.c.e.j.JettyEmbeddedWebAppContext@497c7487{/,[file:///C:/Users/YZ/AppData/Local/Temp/jetty-docbase.928665945842115224.8080/],AVAILABLE} 2020-04-17 17:15:26.360 INFO 39176 --- [ restartedMain] org.eclipse.jetty.server.Server : Started @22288ms 2020-04-17 17:15:26.380 WARN 39176 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'eurekaConfigClientRest': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}" 2020-04-17 17:15:26.384 INFO 39176 --- [ restartedMain] org.eclipse.jetty.server.session : Stopped scavenging 2020-04-17 17:15:26.390 INFO 39176 --- [ restartedMain] o.e.jetty.server.handler.ContextHandler : Stopped o.s.b.c.e.j.JettyEmbeddedWebAppContext@497c7487{/,[file:///C:/Users/YZ/AppData/Local/Temp/jetty-docbase.928665945842115224.8080/],UNAVAILABLE} 2020-04-17 17:15:26.422 INFO 39176 --- [ restartedMain] utoConfigurationReportLoggingInitializer : Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2020-04-17 17:15:26.437 ERROR 39176 --- [ restartedMain] o.s.boot.SpringApplication : Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'eurekaConfigClientRest': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}" at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] at com.changping.springcloud.Eureka_ConfigClient_StartSpringCloud_7001App.main(Eureka_ConfigClient_StartSpringCloud_7001App.java:12) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_172] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_172] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.5.9.RELEASE.jar:1.5.9.RELEASE] Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}" at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] ... 22 common frames omitted
原因是當前bootstrap.yml與appplication.yml的應用名與github上不一致,造成無法訪問。
所以修改github上的應用名使其三者一致:
好了,前面的我也修改了,當前與github上的8001配置文件一點關系也沒有,只是看注冊中心能否啟動。。
接着測試從新啟動microservicecloud-eureka-config-client-7001:
還是報錯:
原來是把 fetch-registry: false寫成了 fetch-register: false,接着通過git bash修改。
重新啟動microservicecloud-eureka-config-client-7001:
還是報錯,為什么gitshu上的文件還是失效?
原原來是文件名和應用名必須要一致,
不過后來發現,之前的pom文件導的不對,還有,啟動類缺一個注解:
正確的pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud-eureka-config-client-7001</artifactId> <dependencies> <!-- SpringCloudConfig配置 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <!-- 熱部署插件 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
正確的啟動類:
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer //開啟注冊中心,允許其它的服務進行注冊 public class Eureka_ConfigClient_StartSpringCloud_7001App { public static void main(String[] args) { SpringApplication.run(Eureka_ConfigClient_StartSpringCloud_7001App.class, args); } }
接着啟動microservicecloud-eureka-config-client-7001
21:14:36.970 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Included patterns for restart : [] 21:14:36.975 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/] 21:14:36.975 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls - Matching URLs for reloading : [file:/D:/workspace/springboot/microservicecloud/microservicecloud-eureka-config-client-7001/target/classes/] 2020-04-17 21:14:39.778 INFO 41688 --- [ restartedMain] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@58544c12: startup date [Fri Apr 17 21:14:39 CST 2020]; root of context hierarchy 2020-04-17 21:14:40.469 INFO 41688 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 21:14:40.613 INFO 41688 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$6710260c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.9.RELEASE) 2020-04-17 21:14:42.374 INFO 41688 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://config_3344.com:3344 2020-04-17 21:14:47.258 INFO 41688 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=microservicecloud-eureka-config-client, profiles=[dev], label=master, version=null, state=null 2020-04-17 21:14:47.260 INFO 41688 --- [ restartedMain] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource [name='configService', propertySources=[MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/microservicecloud-eureka-config-client.yml#dev'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml#dev'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/microservicecloud-eureka-config-client.yml'}, MapPropertySource {name='https://github.com/JIDUPINGFANREN/microservicecloud_config.git/application.yml'}]] 2020-04-17 21:14:47.284 INFO 41688 --- [ restartedMain] ka_ConfigClient_StartSpringCloud_7001App : No active profile set, falling back to default profiles: default 2020-04-17 21:14:47.338 INFO 41688 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@49a9b587: startup date [Fri Apr 17 21:14:47 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@58544c12 2020-04-17 21:14:49.597 INFO 41688 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=e7c62cc9-4455-3a19-92b4-90f2fcc15199 2020-04-17 21:14:49.621 INFO 41688 --- [ restartedMain] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2020-04-17 21:14:49.731 INFO 41688 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration' of type [org.springframework.cloud.netflix.metrics.MetricsInterceptorConfiguration$MetricsRestTemplateConfiguration$$EnhancerBySpringCGLIB$$7d22c950] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 21:14:49.748 INFO 41688 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$6710260c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-04-17 21:14:50.728 INFO 41688 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 7001 (http) 2020-04-17 21:14:50.747 INFO 41688 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-04-17 21:14:50.749 INFO 41688 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23 2020-04-17 21:14:51.210 INFO 41688 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-04-17 21:14:51.211 INFO 41688 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3873 ms 2020-04-17 21:14:52.427 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*] 2020-04-17 21:14:52.428 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-04-17 21:14:52.428 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-04-17 21:14:52.428 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-04-17 21:14:52.428 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-04-17 21:14:52.428 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestTraceFilter' to: [/*] 2020-04-17 21:14:52.429 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'servletContainer' to urls: [/eureka/*] 2020-04-17 21:14:52.429 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*] 2020-04-17 21:14:52.429 INFO 41688 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2020-04-17 21:14:52.661 INFO 41688 --- [ost-startStop-1] c.s.j.s.i.a.WebApplicationImpl : Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM' 2020-04-17 21:14:52.826 INFO 41688 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON encoding codec LegacyJacksonJson 2020-04-17 21:14:52.829 INFO 41688 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using JSON decoding codec LegacyJacksonJson 2020-04-17 21:14:53.132 INFO 41688 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML encoding codec XStreamXml 2020-04-17 21:14:53.133 INFO 41688 --- [ost-startStop-1] c.n.d.provider.DiscoveryJerseyProvider : Using XML decoding codec XStreamXml 2020-04-17 21:14:55.859 INFO 41688 --- [ restartedMain] o.s.cloud.commons.util.InetUtils : Cannot determine local hostname 2020-04-17 21:14:56.522 INFO 41688 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@49a9b587: startup date [Fri Apr 17 21:14:47 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@58544c12 2020-04-17 21:14:56.729 INFO 41688 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/config]}" onto public java.lang.String com.changping.springcloud.rest.EurekaConfigClientRest.getConfig() 2020-04-17 21:14:56.744 INFO 41688 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2020-04-17 21:14:56.744 INFO 41688 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2020-04-17 21:14:56.753 INFO 41688 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.status(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-17 21:14:56.754 INFO 41688 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/lastn],methods=[GET]}" onto public java.lang.String org.springframework.cloud.netflix.eureka.server.EurekaController.lastn(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.Object>) 2020-04-17 21:14:56.818 INFO 41688 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-17 21:14:56.818 INFO 41688 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-17 21:14:56.915 INFO 41688 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-04-17 21:14:57.894 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>) 2020-04-17 21:14:57.896 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/reset],methods=[POST]}" onto public java.util.Map<java.lang.String, java.lang.Object> org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.reset() 2020-04-17 21:14:57.897 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.899 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.900 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.902 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2020-04-17 21:14:57.903 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.904 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/resume || /resume.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-17 21:14:57.904 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/pause || /pause.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-17 21:14:57.908 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2020-04-17 21:14:57.909 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2020-04-17 21:14:57.909 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.910 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.911 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[GET]}" onto public org.springframework.http.ResponseEntity org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.getStatus() 2020-04-17 21:14:57.912 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/service-registry/instance-status],methods=[POST]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint.setStatus(java.lang.String) 2020-04-17 21:14:57.913 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.915 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2020-04-17 21:14:57.916 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.917 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.921 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2020-04-17 21:14:57.922 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/features || /features.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.924 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2020-04-17 21:14:57.924 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:57.925 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/restart || /restart.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke() 2020-04-17 21:14:57.927 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2020-04-17 21:14:57.928 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/refresh || /refresh.json],methods=[POST]}" onto public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke() 2020-04-17 21:14:57.929 INFO 41688 --- [ restartedMain] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/archaius || /archaius.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2020-04-17 21:14:58.311 INFO 41688 --- [ restartedMain] o.s.ui.freemarker.SpringTemplateLoader : SpringTemplateLoader for FreeMarker: using resource loader [org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@49a9b587: startup date [Fri Apr 17 21:14:47 CST 2020]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@58544c12] and template loader path [classpath:/templates/] 2020-04-17 21:14:58.313 INFO 41688 --- [ restartedMain] o.s.w.s.v.f.FreeMarkerConfigurer : ClassTemplateLoader for Spring macros added to FreeMarker configuration 2020-04-17 21:14:58.449 WARN 41688 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server 2020-04-17 21:14:58.609 WARN 41688 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-17 21:14:58.610 INFO 41688 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-17 21:14:58.621 WARN 41688 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 2020-04-17 21:14:58.621 INFO 41688 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-04-17 21:14:58.705 INFO 41688 --- [ restartedMain] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING 2020-04-17 21:14:58.801 INFO 41688 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1 2020-04-17 21:14:58.801 INFO 41688 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Client configured to neither register nor query for data. 2020-04-17 21:14:58.842 INFO 41688 --- [ restartedMain] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1587129298842 with initial instances count: 0 2020-04-17 21:14:59.037 INFO 41688 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initializing ... 2020-04-17 21:14:59.041 WARN 41688 --- [ restartedMain] c.n.eureka.cluster.PeerEurekaNodes : The replica size seems to be empty. Check the route 53 DNS Registry 2020-04-17 21:14:59.063 INFO 41688 --- [ restartedMain] c.n.e.registry.AbstractInstanceRegistry : Finished initializing remote region registries. All known remote regions: [] 2020-04-17 21:14:59.064 INFO 41688 --- [ restartedMain] c.n.eureka.DefaultEurekaServerContext : Initialized 2020-04-17 21:14:59.196 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-04-17 21:14:59.210 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'environmentManager' has been autodetected for JMX exposure 2020-04-17 21:14:59.213 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'configurationPropertiesRebinder' has been autodetected for JMX exposure 2020-04-17 21:14:59.214 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshEndpoint' has been autodetected for JMX exposure 2020-04-17 21:14:59.215 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'restartEndpoint' has been autodetected for JMX exposure 2020-04-17 21:14:59.216 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'serviceRegistryEndpoint' has been autodetected for JMX exposure 2020-04-17 21:14:59.218 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'refreshScope' has been autodetected for JMX exposure 2020-04-17 21:14:59.222 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'environmentManager': registering with JMX server as MBean [org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager] 2020-04-17 21:14:59.243 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'restartEndpoint': registering with JMX server as MBean [org.springframework.cloud.context.restart:name=restartEndpoint,type=RestartEndpoint] 2020-04-17 21:14:59.263 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'serviceRegistryEndpoint': registering with JMX server as MBean [org.springframework.cloud.client.serviceregistry.endpoint:name=serviceRegistryEndpoint,type=ServiceRegistryEndpoint] 2020-04-17 21:14:59.274 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshScope': registering with JMX server as MBean [org.springframework.cloud.context.scope.refresh:name=refreshScope,type=RefreshScope] 2020-04-17 21:14:59.291 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'configurationPropertiesRebinder': registering with JMX server as MBean [org.springframework.cloud.context.properties:name=configurationPropertiesRebinder,context=49a9b587,type=ConfigurationPropertiesRebinder] 2020-04-17 21:14:59.300 INFO 41688 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Located managed bean 'refreshEndpoint': registering with JMX server as MBean [org.springframework.cloud.endpoint:name=refreshEndpoint,type=RefreshEndpoint] 2020-04-17 21:14:59.705 INFO 41688 --- [ restartedMain] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 2020-04-17 21:14:59.706 INFO 41688 --- [ restartedMain] o.s.c.n.e.s.EurekaServiceRegistry : Registering application microservicecloud-eureka-config-client with eureka with status UP 2020-04-17 21:14:59.779 INFO 41688 --- [ Thread-15] o.s.c.n.e.server.EurekaServerBootstrap : Setting the eureka configuration.. 2020-04-17 21:14:59.779 INFO 41688 --- [ Thread-15] o.s.c.n.e.server.EurekaServerBootstrap : Eureka data center value eureka.datacenter is not set, defaulting to default 2020-04-17 21:14:59.780 INFO 41688 --- [ Thread-15] o.s.c.n.e.server.EurekaServerBootstrap : Eureka environment value eureka.environment is not set, defaulting to test 2020-04-17 21:14:59.906 INFO 41688 --- [ Thread-15] o.s.c.n.e.server.EurekaServerBootstrap : isAws returned false 2020-04-17 21:14:59.907 INFO 41688 --- [ Thread-15] o.s.c.n.e.server.EurekaServerBootstrap : Initialized server context 2020-04-17 21:14:59.908 INFO 41688 --- [ Thread-15] c.n.e.r.PeerAwareInstanceRegistryImpl : Got 1 instances from neighboring DS node 2020-04-17 21:14:59.909 INFO 41688 --- [ Thread-15] c.n.e.r.PeerAwareInstanceRegistryImpl : Renew threshold is: 1 2020-04-17 21:14:59.909 INFO 41688 --- [ Thread-15] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP 2020-04-17 21:14:59.924 INFO 41688 --- [ Thread-15] e.s.EurekaServerInitializerConfiguration : Started Eureka Server 2020-04-17 21:14:59.984 INFO 41688 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 7001 (http) 2020-04-17 21:14:59.986 INFO 41688 --- [ restartedMain] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 7001 2020-04-17 21:14:59.994 INFO 41688 --- [ restartedMain] ka_ConfigClient_StartSpringCloud_7001App : Started Eureka_ConfigClient_StartSpringCloud_7001App in 22.985 seconds (JVM running for 25.026) 2020-04-17 21:15:55.964 INFO 41688 --- [nio-7001-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-04-17 21:15:55.964 INFO 41688 --- [nio-7001-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-04-17 21:15:56.012 INFO 41688 --- [nio-7001-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 47 ms 2020-04-17 21:15:59.914 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:16:59.915 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-17 21:17:59.916 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:18:59.917 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-17 21:19:59.918 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:20:59.918 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:21:59.919 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:22:59.919 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:23:59.920 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:24:59.045 WARN 41688 --- [eerNodesUpdater] c.n.eureka.cluster.PeerEurekaNodes : The replica size seems to be empty. Check the route 53 DNS Registry 2020-04-17 21:24:59.920 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:25:59.921 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:26:59.921 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:27:59.922 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:28:59.923 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-17 21:29:59.064 INFO 41688 --- [hresholdUpdater] c.n.e.r.PeerAwareInstanceRegistryImpl : Current renewal threshold is : 1 2020-04-17 21:29:59.924 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:30:59.924 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:31:59.924 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:32:59.925 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:33:59.926 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:34:59.047 WARN 41688 --- [eerNodesUpdater] c.n.eureka.cluster.PeerEurekaNodes : The replica size seems to be empty. Check the route 53 DNS Registry 2020-04-17 21:34:59.927 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:35:59.928 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:36:59.928 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 1ms 2020-04-17 21:37:59.929 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:38:59.929 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:39:59.930 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:40:59.930 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms 2020-04-17 21:41:59.931 INFO 41688 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms
終於啟動成功了:
再次再次訪問:(之前訪問的路徑也不對)
http://eureka7001.com:7001/
接着終於可以去做最后一步——添加配置消費者(在這里卡了兩天了,分明兩個小時就能完成,而且這里的字我又寫了一遍,因為剛才提示Opera內存不足,博客園又閃退了,之前寫的部分又泡湯了)
還好損失小,不過也花費了我10分鍾補回來,欲哭無淚。
現在添加配置消費者新建一個8001項目:
microservicecloud_provider_user_config_client_8001
然后,添加pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>microservicecloud_provider_user_config_client_8001</artifactId> <dependencies> <!-- SpringCloudConfig配置 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>com.changping.springcloud</groupId> <artifactId>microservicecloud_api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> </project>
再把之前普通8001的文件拿過來:
啟動類名修不修改無所謂。
接着添加bootstrap.yml
spring: cloud: config: name: microservicecloud-config-user-client #名字不是隨便起,要根據github上yml文件起 profile: dev #本次訪問的配置項 label: master uri: http://config_3344.com:3344 #本微服務啟動后先去找3344號服務,通過SpringCloudConfig獲取GitHub的服務地址
就是這個文件(名字要和bootstrapyml里的name一致):
application.yml
spring:
application:
name: microservicecloud-config-user-client
UserProvider_Client_8001_App.java
package com.changping.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient //服務發現 public class UserProvider_Client_8001_App { public static void main(String[] args) { SpringApplication.run(UserProvider_Client_8001_App.class, args); } }
microservicecloud_provider_user_config_client_8001結構:
測試
如果是dev則db0325,如果是test則db0326:
首先看:
http://eureka7001.com:7001/
再訪問:
http://localhost:8001/user/list
接着把環境改成test:
bootstrap.yml
spring: cloud: config: name: microservicecloud-config-user-client #在原來基礎上添加eureka #profile: dev #本次訪問的配置項 profile: test label: master uri: http://config_3344.com:3344 #本微服務啟動后先去找3344號服務,通過SpringCloudConfig獲取GitHub的服務地址
重啟訪問:
http://eureka7001.com:7001/
http://localhost:8001/user/list
好了,沒有問題,完成了環境的切換。
當想要切換哪個數據庫,還可以直接更改github上的配置文件:
如下,可在該文件中進行修改數據庫:
microservicecloud-config-user-client.yml
spring: #github client修改1 profiles: active: - dev --- ###########################dev開發環境############################## server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: profiles: dev #github client修改2 application: name: microservicecloud-user-config-dev-client #github client修改3 datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0325 #github client修改4 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://eureka7001.com:7001/eureka/ #github client修改5 #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_client_8001 #github client修改6 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_client_microservicecloud #github client修改7 company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$ --- ###########################test測試環境############################## server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.changping.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: profiles: test #github client修改2 application: name: microservicecloud-user-config-test-client #github client修改3 datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/db0326 #github client修改4 username: root password: dbcp2: min-idle: 5 # 數據庫連接池的最小維持連接數 initial-size: 5 # 初始化連接數 max-total: 5 # 最大連接數 max-wait-millis: 200 # 等待連接獲取的最大超時時間 eureka: client: #客戶端注冊進eureka服務列表內 service-url: defaultZone: http://eureka7001.com:7001/eureka/ #github client修改5 #defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: microservicecloud_user_client_8001 #github client修改6 prefer-ip-address: true #訪問路徑可以顯示IP地址 info: app.name: changping_client_microservicecloud #github client修改7 company.name: www.changping.com build.artifactId: $project.artifactId$ build.version: $project.version$
SpringCloud全部的模塊:
現在我需要把它們上傳到github:
點擊加號新建倉庫:
勾選初始化readme然后點創建。
然后在桌面新建文件夾;
先把SpringCloudDemo克隆下來:
可以看到已經有文件了;
接着把整個項目都導進這個文件夾
查看一下:
提交到github上:
git add *
git commit -m "提交SpringCloudDemo全部項目"
提交的過程:
提交完成:
接着:
git push origin master
可以刷新github:
好啦終於完成了任務,歷時10天。