美文网首页
《四》、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