ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringCloud(二)Eureka、集群环境配置、

2020-12-09 10:03:25  阅读:219  来源: 互联网

标签:服务 SpringCloud Eureka EurekaServer 注册 7001 集群 eureka


1.Eureka

1.1 什么是Eureka

  • Netflix在设计Eureka时,遵循的就是AP原则
  • Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper;

1.2原理

Eureka的基本框架

  • SpringCloud封装了NetFlix公司开发的Eureka模块来实现服务注册和发现(对比Zookeeper)
  • Eureka采用了C-S的架构设计,EurekaServer作为服务注册功能的服务器,他是服务注册中心
  • 而系统中的其他微服务。使用Eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员就可以通过EurekaServer来监控系统中各个微服务是否正常运行,SpringCloud的一些其他模块(比如Zuul)就可以通过EurekaServer来发现系统中的其他微服务,并执行相关的逻辑;
  • Eureka包含两个组件: Eureka Server和Eureka Client。
  • Eureka Server提供服务注册服务,各个节点启动后,会在EurekaServer中进行注册,这样Eureka Server中的服务注册表中将会村粗所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
  • Eureka Client是一个lava客户端,用于简化EurekaServer的交互,客户端同时也具备一个内置的,使用轮询负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除掉(默认周期为90秒)。

Eureka的三角色

  • Eureka Server:提供服务的注册于发现。
  • Service Provider:将自身服务注册到Eureka中,从而使消费方能够找到。
  • Service Consumer:服务消费方从Eureka中获取注册服务列表,从而找到消费服务。

2.创建Eureka模块

2.1 创建一个module子模块springcloud-eureka-7001
2.2 编写application.yml配置文件

server:
  port: 7001

#Eureka配置
eureka:
  instance:
    hostname: localhost #Eureka服务端的实例名称
  client:
    register-with-eureka: false #表示是否向eureka注册中心注册自己
    fetch-registry: false #fetch-registry如果为false,则表示自己为注册中心
    service-url:
      defautZone: http://${eureka.instance.hostname}:${server.port}/eureka

2.3编写启动类

@SpringBootApplication
@EnableEurekaServer //服务端的启动类,可以接受别人注册进来
public class EurekaServer_7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_7001.class,args);
    }
}

测试访问7001端口之后得到如下页面
在这里插入图片描述

3.服务注册、信息配置及自我保护

3.1先在服务提供者8001里导入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>

3.2 在8001的application中添加下面的yml配置

##Eureka的配置,服务注册到哪里
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/

3.3 在8001启动类中添加一个注解@EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient//在服务启动后自动注册到Eureka中。
public class DeptProvider_8001 {
    public static void main(String[] args) {
        SpringApplication.run(DeptProvider_8001.class,args);
    }
}

之后重新启动我们的项目,先启动7001,再启动8001,此时输入localhost:7001可以得到下面的图。
在这里插入图片描述

3.4自我保护机制
一句话总结:某时刻某一个微服务不可以用了,eureka不会立刻清理,依旧会对该微服务的信息进行保存!

  • 默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka之间无法正常通行,以上行为可能变得非常危险了–因为微服务本身其实是健康的,此时本不应该注销这个服务。Eureka通过自我保护机制来解决这个问题–当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该EurekaServer节点会自动退出自我保护模式。
  • 在自我保护模式中,EurekaServer会保护服务注册表中的信息,不再注销任何服务实例。当它收到的心跳数重新恢复到阈值以上时,该EurekaServer节点就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。一句话:好死不如赖活着。
  • 综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮和稳定。
  • 在SpringCloud中,可以使用eureka.server.enable-self-preservation = false禁用自我保护模式【不推荐关闭白我保护机制】。

2.集群环境配置

2.1 在之前的基础上,在写两个注册中心,7002,7003.
2.2将注册中心里的配置复制粘贴到7002、7003,修改端口;然后添加主启动类,也可以复制!
为了在自己电脑上模拟,我们可以添加域名映射:C\System32\drivers\etc\host里面修改域名映射如下:
在这里插入图片描述
2.3将每个注册中心的配置文件里的hostname修改为我们映射的文件!再关联另外两个端口!其余两个类似!

在这里插入图片描述
配置成功后,三个之间的关系如下
在这里插入图片描述

此时,假如7001突然崩溃,7001会告诉请求去其他的端口访问!

2.4将8001里的Eureka配置修改,使其注册到三个注册中心
在这里插入图片描述

启动测试,先启动三个注册中心,再启动提供者8001.

假设此时访问7003,会出现下图所示。同样的访问其他的两个注册中心也会出现类似的!
在这里插入图片描述
同时三个集群里面都会包含我们的提供者8001
在这里插入图片描述
这样一来,某一个注册中心突然失效或者崩溃我们都可以通过关联域名去访问!

标签:服务,SpringCloud,Eureka,EurekaServer,注册,7001,集群,eureka
来源: https://blog.csdn.net/weixin_45801539/article/details/110854462

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有