• 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:workspacespringbootmicroservicecloudmicroservicecloud_api	argetclasses
    [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:workspacespringbootmicroservicecloudmicroservicecloud_api	argetclasses
    [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:workspacespringbootmicroservicecloudmicroservicecloud_api	argetmicroservicecloud_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:workspacespringbootmicroservicecloudmicroservicecloud_api	argetmicroservicecloud_api-0.0.1-SNAPSHOT.jar to C:UsersYZ.m2
    epositorycomchangpingspingcloudmicroservicecloud_api0.0.1-SNAPSHOTmicroservicecloud_api-0.0.1-SNAPSHOT.jar
    [INFO] Installing D:workspacespringbootmicroservicecloudmicroservicecloud_apipom.xml to C:UsersYZ.m2
    epositorycomchangpingspingcloudmicroservicecloud_api0.0.1-SNAPSHOTmicroservicecloud_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:UsersYZ>netstat -ano|findstr 8001
      TCP    0.0.0.0:8001           0.0.0.0:0              LISTENING       20188
      TCP    [::]:8001              [::]:0                 LISTENING       20188
    
    C:UsersYZ>taskkill /pid 20188 /f /t
    成功: 已终止 PID 20188 (属于 PID 12524 子进程)的进程。
    
    C:UsersYZ>

    接下来是项目功能测试,由于访问查询用户全部信息的方法上被定义成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() + " " + element.getHost() + " " + element.getPort() + " " + 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:WindowsSystem32driversetc 下有一个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:workspacespringbootmicroservicecloudmicroservicecloud_api argetmicroservicecloud_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:workspacespringbootmicroservicecloudpom.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:workspacespringbootmicroservicecloudmicroservicecloud_api	argetclasses
    [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:workspacespringbootmicroservicecloudmicroservicecloud_api	argetmicroservicecloud.jar
    [INFO] 
    [INFO] --- maven-install-plugin:2.4:install (default-install) @ microservicecloud_api ---
    [INFO] Installing D:workspacespringbootmicroservicecloudmicroservicecloud_api	argetmicroservicecloud.jar to C:UsersYZ.m2
    epositorycomchangpingspringcloudmicroservicecloud_api0.0.1-SNAPSHOTmicroservicecloud_api-0.0.1-SNAPSHOT.jar
    [INFO] Installing D:workspacespringbootmicroservicecloudmicroservicecloud_apipom.xml to C:UsersYZ.m2
    epositorycomchangpingspringcloudmicroservicecloud_api0.0.1-SNAPSHOTmicroservicecloud_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() + "	" + element.getHost() + "	" + element.getPort() + "	"
                        + 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:WindowsSystem32driversetc 下有一个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:20416mySpringCloud

    打开bush,不需要init,直接按ssh地址克隆:

    可以看到一个空仓库已经出现了:

    点进去打开隐藏文件:

    执行以下命令(没什么用就是看一眼)当前不是在.git同级右键,是它上一级右键,所以没有master:

    去.git同级右键进入bash执行命令看看吧:

    这次我是真的懂了克隆怎么用了,话说一开始我还git init来着,后来就全都是坑了...

    4、在D:20416mySpringCloudmicroservicecloud_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:WindowsSystem32driversetc 下有一个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:20416mySpringCloudmicroservicecloud_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:WindowsSystem32driversetc 下有一个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 + "	 eurekaServers:" + eurekaServers + "	 port: " + port;
            System.out.println("******str: " + str);
            return "applicationName: " + applicationName + "	 eurekaServers:" + eurekaServers + "	 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:20416mySpringCloudmicroservicecloud_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天。

  • 相关阅读:
    $P5240 Derivation$
    $P2504 [HAOI2006]聪明的猴子$
    $P1194 买礼物$
    $P2690 接苹果$
    $CF1141C Polycarp Restores Permutation$
    $CF1141B Maximal Continuous Rest$
    $CF1141A Game 23$
    $P1215 [USACO1.4]母亲的牛奶 Mother's Milk$
    $luogu2375[NOI2014]$
    poj 1419 (最大独立集)
  • 原文地址:https://www.cnblogs.com/timingstarts/p/12654641.html
Copyright © 2020-2023  润新知