springcloud系列之服务治理eureka(代码片段)

共饮一杯无 共饮一杯无     2022-11-30     712

关键词:

什么是Eureka

Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能。

Spring Cloud Eureka 是一个基于 REST 的服务,并提供了基于 Java 的客户端组件,能够非常方便的将服务注册到 Spring Cloud Eureka 中进行统一管理。

Eureka核心概念服务注册和服务发现

服务注册


注册中心拆开来看注册和中心。注册比如用户注册,就是将自己的信息注册在某个平台上。中心可以理解成一个统一管理信息的平台。所以注册中心顾名思义是统一管理所有注册信息的平台。
服务注册指的是服务在启动时将自身的信息注册到注册中心中,方便信息进行统一管理。服务注册是客户端向注册中心提交信息的动作。

服务发现


服务发现指的是从注册中心获取对应服务的信息,是客户端向注册中心拉取pull信息的动作。

Eureka实战


Eureka 的架构主要分为 Eureka Server 和 Eureka Client 两部分,Eureka Client 又分为 Applicaton Service 和 Application Client,Applicaton Service 就是服务提供者,Application Client 就是服务消费者。Eureka Client 会向 Eureka Server 发送请求,进行注册,并将自己的一些信息发送给 Eureka Server。
注册成功后,每隔一定的时间,Eureka Client 会向 Eureka Server 发送心跳来续约服务,也就是汇报健康状态。 如果客户端长时间没有续约,那么 Eureka Server 将在 90 秒(默认)内从服务器注册表中删除客户端的信息。
Eureka Client 还会定期从 Eureka Server 拉取注册表信息,然后通过Ribbon 组件根据负载均衡算法得到一个目标,并发起远程调用。
应用正常停止时也会通知 Eureka Server 移除相关信息,信息成功移除后,其他客户端会更新服务的信息,这样就不会调用已经下线的服务了,当然这个会有延迟,有可能会调用到已经失效的服务,所以在客户端会开启失败重试功能来避免这个问题。
Eureka Server 会有多个节点组成一个集群,保证高可用。Eureka Server 没有集成其他第三方存储,而是存储在内存中,内部维护一个注册表的概念。所以 Eureka Server 之间会将注册信息复制到集群中的 Eureka Server 的所有节点。 这样数据才是共享状态,任何的 Eureka Client 都可以在任何一个 Eureka Server 节点查找注册表信息。

Eureka服务端单节点构建

打开https://start.spring.io/ 或者阿里云的快速start https://start.aliyun.com/bootstrap.html ,开始构建对应的服务端项目。推荐使用阿里云的快速start,因为访问速度更快些。

自动生成完成后,在resource目录下,新建application.yml文件替换原来的application.properties。内容如下:

#应用名称
spring:
  application:
    name: eureka-server
server:
  port: 8001
eureka:
  client:
    # 是否将自己实例注册到Eureka Server中
    register-with-eureka: false
    # 是否应从Eureka Server获取Eureka注册表信息
    fetch-registry: false

在SpringBoot的启动类上添加@EnableEurekaServer 注解,表示是Eureka 服务端。
上述配置完成后,一个单节点的Eureka服务端就配置完成了,启动效果如下:

访问http://localhost:8761/ 可以进入eureka控制台。

目前还没有任何一个服务注册到 Eureka 中,不过从上图中,我们还是可以看到关于 Eureka 服务器内存、CPU 、IP等的相关信息。
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEYRE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE。
图中红色警告翻译为:紧急!Eureka已经不能确认这些已经启动的实例是否可用,由于最近的续订次数小于续订阈值(续订期望值),为了安全起见(实例可用),当前这些实例不会删除。
这是因为Eureka进入自我保护模式(SELF PRESERVATION MODE)。

Eureka服务端集群构建

单个 Eureka 服务可能存在的单点失效问题,我们通常都需要构建一个 Eureka 服务器集群来确保注册中心本身的可用性。与传统的集群构建方式不同,如果我们把 Eureka 也视为一个服务,也就是说 Eureka服务自身也能注册到其他 Eureka 服务上,从而实现相互注册,并构成一个集群。
同样可以通过单节点构建步骤构建两个Eureka Server服务A和B。对应的yml配置如下:

server: 
  port: 8761 

eureka: 
  instance: 
    hostname: eurekaA 
  client: 
    serviceUrl:
       defaultZone: http:// eurekaB:8762/eureka/ 
server: 
  port: 8762 

eureka: 
  instance: 
    hostname: eurekaB 
  client: 
    serviceUrl:
       defaultZone: http://eurekaA:8761/eureka/ 

eureka.instance.hostname 是Eureka 实例管理类配置项 ,用于指定当前 Eureka 服务的主机名称。
需要在本机的hosts文件中添加以下信息:

127.0.0.1 eurekaA 
127.0.0.1 eurekaB

我们可以看到服务端A和B只调整了端口和地址的引用。构建 Eureka 集群模式的关键点在于使用客户端配置项 eureka.client.serviceUrl.defaultZone 用于指向集群中的其他 Eureka 服务器。所以 Eureka 集群的构建方式实际上就是将自己作为服务并向其他注册中心注册自己,这样就形成了一组互相注册的服务注册中心以实现服务列表的同步。这个场景下 register-with-eureka(是否将自己实例注册到Eureka Server中) 和 fetch-registry(是否应从Eureka Server获取Eureka注册表信息)配置项应该都使用其默认的 true 值,我们不需要对其进行显式的设置。
如果你尝试使用本机搭建集群环境,显然 eureka.instance.hostname 配置项中的 eureka1 和 eureka2 是无法访问的,所以需要在本机hosts 文件中添加以下信息。
现在启动这两个 Eureka 服务,然后分别打开 http://127.0.0.1:8761/http://127.0.0.1:8762/ 端点可以看到各自的服务注册效果。

Eureka客户端构建

客户端引入的pom坐标有差异,需要引入客户端坐标:

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

在启动类上需要加@EnableDiscoveryClient注解表示是Eureka客户端。

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientProviderApplication 

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

yml配置如下:

spring: 
  application: 
    name: eureka-client  
server: 
  port: 8081 

eureka: 
  client: 
    serviceUrl: 
    #指定eureka服务端地址,如果是集群则通过逗号分隔
      defaultZone: http://localhost:8761/eureka/ 

配置完成后可以在eureka控制台查看到相关注册信息。

微服务之springcloud实战:springcloudeureka服务治理

服务治理  SpringCloudEureka是SpringCloudNetflix微服务套件的一部分,它基于NetflixEureka做了二次封装,主要完成微服务的服务治理功能,SpringCloud通过为Eureka增加了SpringBoot自动化配置,只需要简单的依赖和配置就可完成Eureka整合搭建... 查看详情

springcloud系列之eureka实现服务注册与发现(代码片段)

如果你对SpringCloud体系还不是很了解,可以先读一下SpringCloud都有哪些模块Eureka是Netflix开源的服务注册发现组件,服务发现可以说是微服务架构的核心功能了,微服务部署之后,一定要有服务注册和发现的能力,Eureka就是担任这... 查看详情

springcloud之eureka原理分析与实战(注册与发现)(代码片段)

目录1、从本质理解服务治理思想2、为什么选择SpringCloud服务治理组件3、SpringCloudEureka服务发现3.1Eureka的优势3.2Eureka架构组成3.3搭建EurekaServer 实战3.3.1添加依赖3.3.2开启服务注册3.3.3添加YML配置3.3.4访问服务3.4搭建EurekaClient实战3.4.... 查看详情

eureka注册中心单机

SpringCloud2.x系列之eureka注册中心单机一、简介SpringCloudEureka是SpringCloudNetflix项目下的服务治理模块。而SpringCloudNetflix项目是SpringCloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为SpringBoot应用提供了自配置的N... 查看详情

第一章服务治理(eureka)

SpringCloud是一系列框架的集合,其基于SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,构建了服务治理(发现注册)、配置中心、消息总线、负载均衡、断路器、数据监控、分布式会话和集群状态管理等功能,为我... 查看详情

springcloud——服务治理中心eureka

...,它提供了完整的ServiceRegistry和ServiceDiscovery实现。也是springcloud体系中最重要最核心的组件之一。Eureka服务中心又称注册中心,管理着各个服务包括服务注册、服务发 查看详情

springcloud系列教程汇总整理手册

...系列之集成Dubbo的方式    >>sourcedownload2、微服务之SpringCloud2.1服务治理实现SpringCloud系列使用NetflixEureka进行服务治理2.2声明式服务调用SpringCloud系列之声明式服务调用NetflixFeign2.3客户端负载均衡SpringCloud系列之客户端负载均... 查看详情

springcloud----服务注册中心eureka

...用来实现各个微服务实例的自动化注册和发现。  SpringCloudEureka是SpringCloudNetflix微服务套件中的一部分,它基于NetflixEureka做了二次封装。主要负责完成微服务架构中的服务治理功能。Eureka服务治理体系如下:1.2服务 查看详情

springcloud系列之eurekazookeeperconsul(代码片段)

SpringCloud系列(一)之Eureka、Zookeeper、Consul一、微服务架构介绍1.1架构的演变1.2SpringCloud介绍二、微服务架构业务场景2.1创建服务提供者(provider)工程2.2创建服务消费者(consumer)工程三、Eureka服务注册与发现3.1搭建注册中心3.... 查看详情

微服务框架之springcloud简介

参考技术A在了解SpringCloud之前先了解一下微服务架构需要考量的核心关键点,如下图:对于以上等核心关键点的处理,不需要我们重复造车轮,SpringCloud已经帮我们集成了,它使用SpringBoot风格将一些比较成熟的微服务框架组合起... 查看详情

springcloud——服务治理机制笔记

SpringCloud——服务治理机制笔记服务治理机制服务提供者服务注册服务提供者在启动的时候会通过发送REST请求的方式将自己注册到EurekaServer上,同时带上了自身服务的一些元数据信息。eureka.client.register-with-eureka=true:启动注册操... 查看详情

springcloud--eureka服务治理深入浅出(代码片段)

文章目录什么是服务治理Eureka调用过程Eureka单机注册Eureka单机启动单机注册集群注册客户调用Eureka集群注册idea如何同一个项目启动多次Eureka自我保护为什么要自我保护如何开启自我保护自我保护如何激活上述源码分布式是现在... 查看详情

eureka----springcloud微服务

服务治理SpringCloudEureka 什么是服务治理在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。服... 查看详情

springcloud之zuul网关

简介  zuul包含了对请求的路由和过滤两个最主要的功能  其中路由功能复杂将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求效验,服... 查看详情

springcloud系列之三---ribbon负载均衡使用

前言本篇主要介绍的是SpringCloud中的负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡,Ribbon适合RPC的远程调用。GitHub源码链接位于文章底部。一、工程首先需要创建四个工程,包括一个转发请求的客户端,两个接收... 查看详情

springcloud系列之四---zuul网关整合swaagger2管理api

前言本篇文章主要介绍的是Zuul网关整合Swaagger2管理API。实现过程需要先创建eureka服务端,再创建多个微服务项目,每个微服务项目整合swagger2,形成接口文档,并且每个微服务需要注册到eureka注册中心。再创建zuul网关对所有的sw... 查看详情

springcloud学习笔记day02——eureka(代码片段)

上一篇:springcloud学习笔记day01一、Eureka基础知识1、什么是服务治理?SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比... 查看详情

springcloud:如何使用eureka进行服务治理?

参考技术A“微服务”一词来自国外的一篇博文,网站:https://martinfowler.com/articles/microservices.html如果您不能看懂英文文档,可以跳转到搜简体中文的文档这是国人翻译的文档,可以学习参考:引用官方文档解释:Eurekaserver:创建... 查看详情