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

一、工程搭建

1、新建 microservicecloud-eureka-7001 模块
2、pom.xml文件

    4.0.0
    
        cn.smilexl.springcloud
        microservicecloud
        0.0.1-SNAPSHOT
    
    
    microservicecloud-eureka-7001

    
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
        
        
            org.springframework.boot
            spring-boot-devtools
            true
        
    
    


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文件修改

  • 修改部分
  
  
      org.springframework.cloud
      spring-cloud-starter-netflix-eureka-client
  
  • 完整内容
    

    4.0.0
    
        cn.smilexl.springcloud
        microservicecloud
        0.0.1-SNAPSHOT
    
    microservicecloud-provider-dept-8001

    
        
        
            cn.smilexl.springcloud
            microservicecloud-api
            ${project.version}
        
        
            junit
            junit
        
        
            mysql
            mysql-connector-java
        
        
            com.alibaba
            druid
        
        
            ch.qos.logback
            logback-core
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-jetty
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
           
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
    


(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 文件添加依赖
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    

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

  
    
        microservicecloud
        
            
                src/main/resources
                true
            
        
        
            
                org.apache.maven.plugins
                maven-resources-plugin
                
                    
                        $
                    
                
            
        
    

(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 文件

  
         
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
         
            org.springframework.boot
            spring-boot-devtools
            true
        
    

(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服务注册与发现)