Eureka注册中心

初始SpringCloud

简介

SpringCloud是Spring旗下的项目之一
Spring最擅长就是集成,把世界上最好的框架拿过来,集成到自己的项目中
SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集成状态等等功能.主要涉及的组件包括:
netflix

  • Eureka:注册中心
  • Zuul:服务网关
  • Ribbon:负载均衡
  • Feign:服务调用
  • Hystix:熔断器
    以上只是其中的一部分,架构图
    Eureka注册中心_第1张图片

Eureka注册中心

Eureka注册中心_第2张图片

1.认识Eureka

Eureka做什么?

Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。

同时,服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。

这就实现了服务的自动注册、发现、状态监控。

2.原理图

基本架构:
Eureka注册中心_第3张图片

  • Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
  • 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
  • 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
  • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

3.eureka运行机制

  1. 注册

    应用启动时,会连接注册中心进行注册。

    如果无法连接注册中心,它会一次一次的反复进行注册,直到成功为止。

  2. 拉取

    每个服务都会从注册中心拉取注册表,每30秒会重新拉取一次注册表进行更新。

  3. 心跳

    客户端会每30秒向 eureka 注册中心发送一次心跳数据,eureka 连续3次收不到心跳,认为服务已经死掉,会从注册表删除服务。

  4. 自我保护模式

    是一种特殊情况

    由于网络不稳定,造成 85%以上的服务器出现心跳异常,这时会进入自我保护模式,在保护模式下,所有服务都不删除,直到网络恢复,会自动退出自我保护模式。

4.eureka和zookeeper区别

  • eureka

    • ​强调AP - 可用性 分区容错性
    • 集群 - 对等结果
  • zookeeper

    • 强调CP - 一致性 分区容错性

    • 集群 - 主从结果

5.入门案例

eureka 注册与发现

1. 创建项目

2. 导入坐标

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

3. 编写启动类,添加启动eureka服务的注解

@EnableEurekaServer
@SpringBootApplication
public class Sp05EurekaApplication {

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

}

4. 编写yml配置

#服务器断口
server:
  port: 2001
#服务器名
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: eureka1
  server:
    #关闭自我保护
    enable-self-preservation: false
  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
  1. 启动服务测试
    修改hosts文件,添加eureka域名映射
    C:\Windows\System32\drivers\etc\hosts
    添加内容
127.0.0.1       eureka1
127.0.0.1       eureka2

服务提供者

1. pom.xml 添加eureka依赖

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

2. application.yml 添加eureka注册配置

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

  • eureka.instance.lease-renewal-interval-in-seconds
    心跳间隔时间,默认 30 秒

  • defaultZone,默认位置,可以修改为具体地理位置,比如:beiJing, shangHai, shenZhen 等,表示 eureka 服务器的部署位置, 需要云服务器提供

  • eureka.client.registry-fetch-interval-seconds
    拉取注册信息间隔时间,默认 30 秒

3. 主程序启用eureka客户端

主程序添加 @EnableDiscoveryClient 注解

4. 启动服务,在eureka中查看注册信息

你可能感兴趣的:(SpringCloud)