美文网首页
《四》、springcloud微服务——Eureka服务注册与发

《四》、springcloud微服务——Eureka服务注册与发

作者: 神奇作手 | 来源:发表于2019-07-19 22:26 被阅读0次

    一、工程搭建

    1、新建 microservicecloud-eureka-7001 模块
    2、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>cn.smilexl.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-netflix-eureka-server</artifactId>
            </dependency>
            <!-- 修改后立即生效,热部署 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
        
    </project>
    
    
    3、application.yml文件
    server: 
      port: 7001
     
    eureka:
      instance:
        hostname: localhost           #eureka服务端的实例名称
      client:
        register-with-eureka: false   #false表示不向注册中心注册自己。
        fetch-registry: false         #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
        service-url: 
     #    设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
        
    
    4、创建 EurekaServer7001_App.java 主启动类
    package cn.smilexl.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer //EurekaServer服务器端启动类,接受其它微服务注册进来
    public class EurekaServer7001_App {
        
        public static void main(String[] args) {
            SpringApplication.run(EurekaServer7001_App.class, args);
        }
        
    }
    

    浏览器中查看:localhost:7001


    二、将已有的部门微服务注册进eureka服务中心

    1、修改 microservicecloud-provider-dept-8001

    (1)、pom.xml文件修改

    • 修改部分
      <!-- 将微服务provider注册进eureka -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      </dependency>
    
    • 完整内容
        
    <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>cn.smilexl.springcloud</groupId>
            <artifactId>microservicecloud</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <artifactId>microservicecloud-provider-dept-8001</artifactId>
    
        <dependencies>
            <!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
            <dependency>
                <groupId>cn.smilexl.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>   
            <!-- 将微服务provider注册进eureka -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
            <!-- actuator监控信息完善 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        </dependencies>
    </project>
    
    

    (2)、application.yml文件修改

    • 修改部分
    eureka:
      client: #客户端注册进eureka服务列表内
        service-url: 
          defaultZone: http://localhost:7001/eureka
    
    
    • 完整内容
    server:
      port: 8001
      
    mybatis:
    #  config-location: classpath:mybatis/mybatis.cfg.xml       # mybatis配置文件所在路径
      type-aliases-package: cn.smilexl.springcloud.entities     # 所有Entity别名类所在包
      mapper-locations: classpath:mapper/**/*.xml               # mapper映射文件
        
    spring:
       application:
        name: microservicecloud-dept                           # 微服务名
       datasource:
        type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
        driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
        url: jdbc:mysql://47.99.218.123:3306/clouddb01          # 数据库名称
        username: root
        password: 123456
        dbcp2:
          min-idle: 5                                           # 数据库连接池的最小维持连接数
          initial-size: 5                                       # 初始化连接数
          max-total: 5                                          # 最大连接数
          max-wait-millis: 200                                  # 等待连接获取的最大超时时间
          
    
    eureka:
      client: #客户端注册进eureka服务列表内
        service-url: 
          defaultZone: http://localhost:7001/eureka
     
    

    (3)、DeptProvider8001_App.java 启动类上面添加注解

    • 启动类上添加注解:@EnableDiscoveryClient //本服务启动后会自动注册进eureka服务中;
    • 完整内容
    package cn.smilexl.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient  //本服务启动后会自动注册进eureka服务中
    public class DeptProvider8001_App {
        public static void main(String[] args) {    
            SpringApplication.run(DeptProvider8001_App.class, args);    
        }
    }
    
    

    (4)、测试

    • 依次启动 microservicecloud-eureka-7001、microservicecloud-provider-dept-8001

    三、actuator(制动器)与注册信息的完善

    1、主机名称:微服务名称修改

    (1)、当前问题: 含有主机名称。

    (2)、修改 microservicecloud-provider-dept-8001

    • yml修改部分
    eureka:
      client: #客户端注册进eureka服务列表内
        service-url: 
          defaultZone: http://localhost:7001/eureka
      instance:
        instance-id: microservicecloud-dept-8001  #自定义服务名称信息
        prefer-ip-address: true     #访问路径可以显示IP地址
    
    • yml完整部分
    server:
      port: 8001
      
    mybatis:
      config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路径
      type-aliases-package: com.smilexl.springcloud.entities   # 所有Entity别名类所在包
      mapper-locations:
      - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件
        
    spring:
       application:
        name: servicespringcloud-dept 
       datasource:
        type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
        driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
        url: jdbc:mysql://47.99.218.123:3306/clouddb01            # 数据库名称
        username: root
        password: 123456
        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-dept-8001  #自定义服务名称信息
        prefer-ip-address: true     #访问路径可以显示IP地址
    
    

    (3)、修改完之后

    2、微服务info内容详细信息

    (1)、当前问题:点击超链接报错

    (2)、修改 microservicecloud-provider-dept-8001

    • pom.xml 文件添加依赖
        <!-- actuator监控信息完善 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    

    (3)、总的父工程 microservicecloud 修改pom.xml添加构建 build 信息

      <!-- 解决微服务info内容详细信息显示 -->
        <build>
            <finalName>microservicecloud</finalName>
            <resources>
                <resource>
                    <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>
                        </delimiters>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    

    (4)、修改 microservicecloud-provider-dept-8001

    • yml 文件中添加内容
     #点击超链接后显示信息   
    info:
      app.name: microservicecloud
      company.name: www.smilexl.com
      build.artifactId: $project.artifactId$
      build.version: $project.version$
    
    • yml 完整内容
    server:
      port: 8001
      
    mybatis:
    #  config-location: classpath:mybatis/mybatis.cfg.xml       # mybatis配置文件所在路径
      type-aliases-package: cn.smilexl.springcloud.entities     # 所有Entity别名类所在包
      mapper-locations: classpath:mapper/**/*.xml               # mapper映射文件
        
    spring:
       application:
        name: servicespringcloud-dept                           # 微服务名
       datasource:
        type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
        driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
        url: jdbc:mysql://47.99.218.123:3306/clouddb01          # 数据库名称
        username: root
        password: 123456
        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-dept-8001  #自定义服务名称信息
        prefer-ip-address: true  #访问路径可以显示IP地址
     
     #点击超链接后显示信息   
    info:
      app.name: microservicecloud
      company.name: www.smilexl.com
      build.artifactId: $project.artifactId$
      build.version: $project.version$
      
    

    四、Eureka自我保护机制

      在自我保护模式中,EurekaServer会保护服务注册表中的信息,不再注销任何服务实例。当它收到的心跳数重新恢复到阈值以上时,该EurekaServer节点就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实列。一句话:好死不如赖活着。

    自我保护模式时一种应对网络异常的安全保护措施,它的架构哲学时宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务,使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

      一句话,某时刻某一个服务不可用了,eureka不会立刻清理,依旧会对该微服务的信息进行保存。

        可以啊使用 eureka.server.enable-self-preservation = false  禁用自我保护模式。
    

    五、Eureka服务发现Discovery(了解)

    对注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息

    六、Eureka集群配置

    1、原理说明
    eureka集群
    • 处于不同节点的eureka通过Replicate进行数据同步;
    • Application Service 为服务提供者;
    • Application Client 为服务消费者;
    • Make Remote Call 完成一次服务调用;

    服务启动后向Eureka注册,Eureka Server 会将注册信息向其他Eureka Server 进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
    当服务注册中心 Eureka Server 检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。服务提供者在启动或,周期性(默认30秒)向Eureka Server 发送心跳,以证明当前服务是可用状态。Eureka Server 在一定的时间(默认90秒)未收到客户的心跳,则认为服务宕机,注销该实列。

    2、搭建集群

    (1)、新建工程 microservicecloud-eureka-7002、microservicecloud-eureka-7003

    (2)、按照7001为模板,粘贴 pom.xml 文件

      <dependencies>
            <dependency> <!--eureka-server服务端 -->
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <dependency> <!-- 修改后立即生效,热部署 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    

    (3)、修改7002、7003 的主启动类

    @SpringBootApplication
    @EnableEurekaServer //EurekaServer服务器端启动类,接受其它微服务注册进来
    public class EurekaServer7002_App {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServer7002_App.class, args);
        } 
    }
    
    @SpringBootApplication
    @EnableEurekaServer //EurekaServer服务器端启动类,接受其它微服务注册进来
    public class EurekaServer7003_App {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServer7003_App.class, args);
        }
    }
    

    (4)、修改映射配置

    找到 C:\Windows\System32\drivers\etc 路径下的host文件
    修改映射配置添加进hosts文件

    添加如下配置:

       127.0.0.1  eureka7001.com
       127.0.0.1  eureka7002.com
       127.0.0.1  eureka7003.com
    

    (5)、3台eureka服务器的yml配置

    • 7001的yml配置文件
    server: 
      port: 7001
    
    eureka:
      instance:
        hostname: eureka7001.com      #eureka服务端的实例名称
      client:
        register-with-eureka: false   #false表示不向注册中心注册自己。
        fetch-registry: false         #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
        service-url:
    #     设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。 
    #     单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/      
          defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/   
    
    • 7002的yml配置文件
    server: 
      port: 7002
    
    eureka:
      instance:
        hostname: eureka7002.com      #eureka服务端的实例名称
      client:
        register-with-eureka: false   #false表示不向注册中心注册自己。
        fetch-registry: false         #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
        service-url:
    #     设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。 
    #     单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/      
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/  
    
    • 7003的yml配置文件
    server: 
      port: 7003
     
    eureka:
      instance:
        hostname: eureka7003.com      #eureka服务端的实例名称
      client:
        register-with-eureka: false   #false表示不向注册中心注册自己。
        fetch-registry: false         #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
        service-url:
    #     设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。 
    #     单机 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/      
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/  
    

    (6)、microservicecloud-provider-dept-8001微服务发布到上面3台eureka集群配置中

    修改yml配置文件,如下:

    server:
      port: 8001
    #mybatis相关配置  
    mybatis:
    #  config-location: classpath:mybatis/mybatis.cfg.xml       # mybatis配置文件所在路径
      type-aliases-package: cn.smilexl.springcloud.entities     # 所有Entity别名类所在包
      mapper-locations: classpath:mapper/**/*.xml               # mapper映射文件
        
    spring:
       application:
        name: microservicecloud-dept                           # 微服务名
       datasource:
        type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
        driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
        url: jdbc:mysql://47.99.218.123:3306/clouddb01          # 数据库名称
        username: root
        password: 123456
        dbcp2:
          min-idle: 5                                           # 数据库连接池的最小维持连接数
          initial-size: 5                                       # 初始化连接数
          max-total: 5                                          # 最大连接数
          max-wait-millis: 200                                  # 等待连接获取的最大超时时间
    #eureka相关配置     
    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-dept-8001  #自定义服务名称信息
        prefer-ip-address: true  #访问路径可以显示IP地址
     
     #点击超链接后显示信息   
    info:
      app.name: microservicecloud
      company.name: www.smilexl.cn
      build.artifactId: $project.artifactId$
      build.version: $project.version$
      
    

    (6)、依次启动7001、7002、7003、8001测试
        效果如下:

    七、作为服务注册中心,Eureka比Zookeeper好在哪里?

    Eureka比Zookeeper对比:https://www.jianshu.com/p/5e46fbb6c7cc

    相关文章

      网友评论

          本文标题:《四》、springcloud微服务——Eureka服务注册与发

          本文链接:https://www.haomeiwen.com/subject/pppllctx.html