SpringCloud搭建教程


本文是個人學習記錄,屬於半原創入門教程,僅供參觀,請勿轉載。

你期待已久的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:

傳統情況下在java代碼里訪問restful服務,一般使用 ApacheHttpClient。不過此種方法使用起來太過繁瑣。
spring提供了一種簡單便捷的模板類來進行操作,這就是 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是Netflix開發的服務發現框架,本身是一個基於REST的服務,主要用於定位運行在AWS域中的中間層服務,
以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-cloud-netflix中,以實現SpringCloud的服務發現功能。
Eureka包含兩個組件:Eureka Server和Eureka Client。
Eureka Server提供服務注冊服務,各個節點啟動后,會在Eureka Server中進行注冊,這樣EurekaServer中的服務注冊表中將會存儲所有可用服務節點的信息,
服務節點的信息可以在界面中直觀的看到。
Eureka Client是一個java客戶端,用於簡化與Eureka Server的交互,客戶端同時也就是一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。

那么同樣作為服務注冊中心,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方式。

5、接着執行命令,提交該配置文件到遠程倉庫:

去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/15127.0.0.1       myzuul.com
#映射文件springcloud config配置文件時需要這個映射,它相當於localhost,修改於2020/04/16127.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/15127.0.0.1       myzuul.com
#映射文件springcloud config配置文件時需要這個映射,修改於2020/04/16127.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天。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM