第二章 Eureka服务注册与发现

这篇具有很好参考价值的文章主要介绍了第二章 Eureka服务注册与发现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Eureka服务注册与发现

gitee:springcloud_study: springcloud:服务集群、注册中心、配置中心(热更新)、服务网关(校验、路由、负载均衡)、分布式缓存、分布式搜索、消息队列(异步通信)、数据库集群、分布式日志、系统监控链路追踪。

1. Eureka基础知识

什么是服务治理?

在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

什么是服务注册与发现?

Eureka采用了CS的设计架构,Eureka Sever作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Sever并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息上比如服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

Eureka提供服务的注册和发现,Eureka有Eureka Server和Eureka Client,每一个Eureka Client启动时会向Eureka Server注册自己的信息。对于Eureka Client分为提供者和消费者,提供者根据Eureka Server服务列表来取消费者信息。Eureka Client会定期向Eureka Server发送心跳,Eureka Server根据心跳判断服务是否断开。 Eureka默认情况下是开始自我保护模式,就是在一定的时间内虽然eureka client没有发送心跳信息,但是eureka server不会注销该实例,以防可以是网络分区故障发生的情况。

Eureka Server和Eureka Client

Eureka Server提供服务注册服务:各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

EurekaClient通过注册中心进行访问:是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

2. 单机Eureka构建步骤

2.1 EurekaServer端服务注册中心搭建
  1. 创建cloud-eureka-server7001

  2. Pom文件填入

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

server:
  port: 7001
eureka:
  #eureka实例
  instance:
    hostname: localhost
  #eureka server本省也是一个client,如果是集群的话,所以这里需要进行client的配置
  client:
    #这里表示不将该server端注册进注册中心
    register-with-eureka: false
    #这里表示不需要取检索服务,因为本身是注册中心,但是对于集群是可以设置的
    fetch-registry: false
    #表示用户可以查看注册中的地址或者其他服务注册进入的地址,这个地址可以是多个
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  1. 主启动类

@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class,args);
    }
}

@EnableEurekaServer标注是server端。

  1. 测试

第二章 Eureka服务注册与发现,eureka,云原生

2.2 Eureka Client端cloud-provider-payment8001搭建
  1. 添加pom文件

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

eureka:
  client:
    #是否从Eurekaserver抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    #是否注册自己
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:7001/eureka
  1. 主启动类

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}
  1. 测试

第二章 Eureka服务注册与发现,eureka,云原生

2.3 Eureka Client端cloud-consumer-order80搭建
  1. 添加pom文件

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

eureka:
  client:
    #是否从Eurekaserver抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    #是否注册自己
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:7001/eureka
  1. 主启动类

@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class,args);
    }
}
  1. 测试

第二章 Eureka服务注册与发现,eureka,云原生

3. 集群Eureka构建步骤

Eureka集群原理说明 Eureka集群防止单点故障,实现高可用,Eureka集群能实现负载均衡+故障容错。Eureka集群就是Eureka Server相互注册,相互守望。

EurekaServer集群环境构建步骤 1.根据cloud-eureka-server7001构建一个cloud-eureka-server7002项目,作为第二个Eureka Server。 2.修改C:\Windows\System32\drivers\etc\hosts文件

第二章 Eureka服务注册与发现,eureka,云原生

3.cloud-eureka-server7001的yaml文件和cloud-eureka-server7002的yaml文件

server:
  port: 7001
eureka:
  #eureka实例
  instance:
    hostname: eureka7001.com
  #eureka server本省也是一个client,如果是集群的话,所以这里需要进行client的配置
  client:
    #这里表示不将该server端注册进注册中心
    register-with-eureka: false
    #这里表示不需要取检索服务,因为本身是注册中心,但是对于集群是可以设置的
    fetch-registry: false
    #表示用户可以查看注册中的地址或者其他服务注册进入的地址,这个地址可以是多个
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/
server:
  port: 7002
​
eureka:
  #eureka实例
  instance:
    hostname: eureka7002.com
  #eureka server本省也是一个client,如果是集群的话,所以这里需要进行client的配置
  client:
    #这里表示不将该server端注册进注册中心
    register-with-eureka: false
    #这里表示不需要取检索服务,因为本身是注册中心,但是对于集群是可以设置的
    fetch-registry: false
    #表示用户可以查看注册中的地址或者其他服务注册进入的地址,这个地址可以是多个
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/

4.测试

第二章 Eureka服务注册与发现,eureka,云原生

cloud-provider-payment8001和cloud-consumer-order80加入集群

1.修改eureka下面的defaultZone配置

defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

2.测试

第二章 Eureka服务注册与发现,eureka,云原生

创建cloud-provider-payment8002并加入集群

1.cloud-provider-payment8002出端口以外,其他与cloud-provider-payment8001一样。

2.修改cloud-provider-payment8001/8002,使其显示端口号

@Value("${server.port}")
private String serverPort;

3.测试

第二章 Eureka服务注册与发现,eureka,云原生

第二章 Eureka服务注册与发现,eureka,云原生

但是:

第二章 Eureka服务注册与发现,eureka,云原生

4.解决办法,修改cloud-consumer-order80项目的controller层

public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";

新问题(不开启负载均衡):

第二章 Eureka服务注册与发现,eureka,云原生

5.配置负载均衡

@Configuration
public class ApplicationContextConfig {
​
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
    
}

@LoadBalanced开启负载均衡。

测试:

第二章 Eureka服务注册与发现,eureka,云原生

4. actuator微服务信息完善

第二章 Eureka服务注册与发现,eureka,云原生

actuator完善需要jar:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 主机名称:服务名称修改

eureka:
  instance:
    instance-id: payment8001
  1. 访问信息有IP信息提示

eureka:
  instance:
    instance-id: order80
    prefer-ip-address: true

测试:

第二章 Eureka服务注册与发现,eureka,云原生

5. 服务发现Discovery

服务发现就是对于注册到eureka的信息进行服务信息获取,查看。

操作:修改cloud-provider-payment8001端口

controller层:

@Resource
private DiscoveryClient discoveryClient;
​
@GetMapping(value = "/payment/discovery")
public Object getDiscovery(){
    List<String> services=discoveryClient.getServices();
    for (String service : services) {
    log.info("*******element:"+service);
}
    List<ServiceInstance> instances =   discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    for (ServiceInstance instance : instances) {
    log.info(instance.getInstanceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
    }
    return this.discoveryClient;
}

主启动类:

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

@EnableDiscoveryClient用于服务发现。

测试:

第二章 Eureka服务注册与发现,eureka,云原生

6. Eureka自我保护

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。 ​ Eureka自动开启自我保护机制,一旦有服务宕机或者断开,Eureka注册中心不会立即将该服务注销。

**什么是自我保护模式**:默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。综上,**自我保护模式是一种应对网络异常的安全保护措施**。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

怎么禁止自我保护

修改cloud-eureka-server7001的yaml文件:

eureka:
  server:
    #默认保护机制
    enable-self-preservation: false
    #时间间隔2s
    eviction-interval-timer-in-ms: 2000

修改cloud-provider-payment8001的yaml文件:

eureka:
  instance:
    instance-id: payment8001
    prefer-ip-address: true
    #发送心跳默认30s,设置1s
    lease-renewal-interval-in-seconds: 1
    #最后一次心跳等待时间超越系统默认是90s,设置2s
    lease-expiration-duration-in-seconds: 2

测试:(打开8001进行连接,最后断开8001服务,查看eureka server界面)

第二章 Eureka服务注册与发现,eureka,云原生

Eureka停更

官网:Eureka 2.0 (Discontinued)文章来源地址https://www.toymoban.com/news/detail-772447.html

到了这里,关于第二章 Eureka服务注册与发现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1-Eureka服务注册与发现以及Eureka集群搭建(实操型)

    直接看下面的文章 idea创建maven多模块项目. 简单介绍一下: 父工程: dog-cloud-parent 管理实体项目: dog-po 微服务-服务提供者: dog-provider-8001 微服务-服务消费者: dog-consumer-80 如下: 1.3.1 父工程:dog-cloud-parent pom如下: 1.3.2 管理实体项目:dog-po 如下: 1.3.3 服务提供者:dog-

    2024年02月16日
    浏览(54)
  • 服务注册发现_搭建单机Eureka注册中心

    创建cloud-eureka-server7001模块 pom添加依赖 写yml文件 主启动类 测试 访问浏览器localhostL:7001 参数: Environment: 环境,默认为test,该参数在实际使用过程中,可以不用更改 Data center: 数据中心,使用的是默认的是 “MyOwn” Current time:当前的系统时间 Uptime:已经运行了多少时间

    2024年02月07日
    浏览(44)
  • springcloud Eureka服务注册与发现

    代码上传到 :https://github.com/13thm/study_springcloud/tree/main/days3 什么是服务治理 Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理 什么是服务注册与发现 Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使

    2024年01月18日
    浏览(69)
  • Eureka、Zookeeper、Consul服务注册与发现

    一、Eureka服务注册与发现 1.1 概念 Eureka 是 Netflix 公司开源的一个服务注册与发现的组件 。 Eureka 和其他 Netflix 公司的服务组件(例如负载均衡、熔断器、网关等) 一起,被 Spring Cloud 社区整合为Spring-Cloud-Netflix 模块。 Eureka 包含两个组件:Eureka Server (注册中心) 和 Eureka Clien

    2024年02月02日
    浏览(44)
  • 什么是SpringCloud Eureka服务注册与发现

    😀前言 本篇博文是关于SpringCloud Eureka 介绍,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰 如果文

    2024年02月09日
    浏览(48)
  • SpringCloud服务注册与发现组件Eureka(五)

    Eureka github 地址: https://github.com/Netflix/eureka Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功

    2024年02月09日
    浏览(59)
  • Spring Cloud Eureka:服务注册与发现

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Spring Cloud Eureka是Spring Cloud生态系统中的一个组件,它是用于实现服务注册与发现的服务治理组件。在微服务架构中,服务之间存在复杂的依赖关系,而Spring Cloud Eureka可以帮助解决服务之间相互查找和通信的问题 Eurek

    2024年02月09日
    浏览(53)
  • Eureka:构建可靠的服务注册和发现系统

    在分布式系统中,服务注册和发现是一项关键任务。Netflix开源的Eureka框架为我们提供了一种可靠、高效的解决方案。本文将介绍Eureka的主要特点和工作原理,并提供一些实际的代码示例。 服务注册和发现 :Eureka允许微服务在启动时自动向注册中心注册自己的信息,包括服务

    2024年02月12日
    浏览(45)
  • 【Spring Cloud 三】Eureka服务注册与服务发现

    【Spring Cloud一】微服务基本知识 目前公司项目使用的注册中心主要是Spring Cloud Alibaba的Nacos做的注册中心和配置中心。之前也是对Nacos的基本原理通过手写代码的方式进行了实现。出于对于Eureka的好奇所以就对Spring Cloud Neflix的Eureka进行理论学习和实践。 Eureka是一个 注册发现中

    2024年02月14日
    浏览(159)
  • 【SpringCloud微服务】- Eureka服务注册与服务发现Discovery

    Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。 SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。 Eureka包含两个组件: Eureka Server 和 E

    2024年02月03日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包