eureka注册中心

eureka注册中心

概览图

注册中心工作机制

服务提供者注册

一次一次地尝试注册,直到注册成功为止

心跳

30秒发送一次心跳

eureka连续三次收不到一个服务的心跳,会删除这个服务

服务消费者拉取注册表

每30秒拉取一次注册表,刷新注册表

自我保护模式

是一种特殊情况,如果15分钟内,85%以上服务器都出现心跳异常(可能是网络不稳定),eureka会进入自我保护模式,所有的注册信息都不删除。

等待网络恢复后,可以自动退出保护模式

开发期间,为了影响测试,可以先关闭保护模式

搭建eureka服务

1.创建eureka项目

创建springboot项目导入依赖需要导入eureka server依赖即可

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

pom中会自动生成dependencyManagement标签

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.配置文件

spring:
  application:
    name: eureka # 同一个业务, 名字项目, 用于被负载均衡识别

server:
  port: 2001

eureka:
  server:
    enable-self-preservation: false # 关闭自我保护策略
  instance:
    hostname: eureka1 # \u96C6\u7FA4\u4E2D\u7528hostname\u6765\u533A\u5206\u670D\u52A1\u5668
  client:
    register-with-eureka: false # 不向自身注册
    fetch-registry: false # 不从自身拉取注册信息

关于配置文件:

  • eureka 集群服务器之间,通过 hostname 来区分

  • eureka.server.enable-self-preservation

    eureka 的自我保护状态:心跳失败的比例,在15分钟内是否超过85%,如果出现了超过的情况,Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务

  • eureka.client.register-with-eureka=false

    不向自身注册

  • eureka.client.fetch-registry=false

    不从自身拉取注册信息

  • eureka.instance.lease-expiration-duration-in-seconds

    最后一次心跳后,间隔多久认定微服务不可用,默认90

3.主启动类

需要使用@EnableEurekaServer注解, 来开启eureka服务

@EnableEurekaServer
@SpringBootApplication
public class Sp05EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(Sp05EurekaApplication.class, args);
	}

}

4.测试

启动项目, 浏览器输入: http://localhost:2001可出现如下页面

配置eureka提供者

1.提供者项目导入依赖

导入Eureka Discovery Client eureka客户端依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

使用开发工具导入依赖会自动生成如下内容

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.配置文件

配置eureka server的路径, 最后面要加一个eureka子路径

eureka:
  client:
    service-url:
      defaultZone: http://localhost:2001/eureka

如果是阿里云, 腾讯云等云产品, 可不需要defaultZone属性

关于其他配置

  • eureka.instance.lease-renewal-interval-in-seconds
    心跳间隔时间,默认 30 秒
  • defaultZone,默认位置,可以修改为具体地理位置,比如:beiJing, shangHai, shenZhen 等,表示 eureka 服务器的部署位置, 需要云服务器提供
  • eureka.client.registry-fetch-interval-seconds
    拉取注册信息间隔时间,默认 30 秒

3.启动类注解(新版本可忽略)

在主启动类上加一个注解 springboot新版本, 此注解可加可不加

@EnableDiscoveryClient

4.启动并测试

最好先启动eureka的服务, 即消费者, 再启动提供者

浏览器输入http://localhost:2001 看到如下内容表示成功

注意: 可能eureka的控制台可能会有Connect to localhost:8761 timed out异常, 原因是没有搭建eureka集群

eureka集群搭建(高可用)

1. 前提准备

我们需要搭建2个eureka服务来测试集群 [搭建eureka服务]

假设我们有两个eureka, 域名分别是eureka1eureka2 (可更改host文件模拟域名)

配置文件修改一下即可

2.配置eureka集群

register-with-eureka: true fetch-registry: true 必须都设置为true

enable-self-preservation: false 开发的时候暂时把保护模式关闭

eureka1的配置

eureka:
  server:
    enable-self-preservation: false
  instance:
    hostname: eureka1  # 主机名 eureka1
  client:
    register-with-eureka: true # 注册
    fetch-registry: true # 拉取
    service-url:
      defaultZone: http://eureka2:2002/eureka # 连接erueka2
      
server:
  port: 2001 # 如果不在同一台电脑, 端口可以和其他eureka服务一致

eureka2的配置

eureka:
  server:
    enable-self-preservation: false
  instance:
    hostname: eureka2    # 主机名 eureka2
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka1:2001/eureka # 连接erueka1
      
server:
  port: 2002 # 如果不在同一台电脑, 端口可以和其他eureka服务一致

搭建完成后, 先启动eureka服务, 在启动提供者, 2个eureka服务的控制台没有Connect to localhost:8761 timed out异常说明搭建成功

3.配置提供者

关于提供者的项目搭建: [eureka提供者]

提供者配置链接的集群

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka,http://eureka1:2002/eureka

4.查看效果

浏览器输入http:eureka1:2001http:eureka2:2002查看效果

这里的eureka1和eureka2已经在host文件中进行了配置

效果如下


posted @ 2020-08-26 08:31  zpk-aaron  阅读(241)  评论(0编辑  收藏  举报