✨ Eureka服务注册与发现

微服务的注册中心注册中心的基本介绍注册中心的主要作用注册中心基本原理常见的注册中心

Eureka基本介绍服务治理服务注册Eureka 两大组件

搭建EurekaEureka端服务注册中心创建新模块 cloud-eureka-server7001添加pom依赖yml配置启动类服务中心管理后台

服务提供者**EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者provider**模块**cloud-provider-payment8001(参照上一篇文章)**添加pom依赖yml主启动类测试

服务消费者**EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer**Module:cloud-consumer-order80添加pom依赖yml主启动类测试

Eureka中的自我保护机制

个人主页:不断前进的皮卡丘

博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记

个人专栏:微服务专栏

微服务的注册中心

注册中心的基本介绍

注册中心可以说是微服务架构中的"通讯录",它记录了服务和服务之间地址的映射关系。在分布式架构中, 服务会注册到这里(注册中心),当服务需要调用其它服务时,就这里找到服务的地址,进行调用。

注册中心的主要作用

注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:

服务发现: 服务注册/反注册:保存服务提供者和服务调用者的信息 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能 服务路由(可选):具有筛选整合服务提供者的能力。服务配置: 配置订阅:服务提供者和服务调用者订阅微服务相关的配置 配置下发:主动将配置推送给服务提供者和服务调用者服务健康检测 检测服务提供者的健康情况

注册中心基本原理

微服务模式-注册中心详解

常见的注册中心

Zookeeper zookeeper它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应 用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项 的管理等。简单来说zookeeper=文件系统+监听通知机制。Eureka Eureka是在Java语言上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflflix中的重要组 件Consul Consul是由HashiCorp基于Go语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件, 采用Raft算法保证服务的一致性,且支持健康检查。Nacos Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中心 + 配置中心的组合,提供简单易用的特性集,帮助我们解决微服务开发必会涉及到的服务注册 与发现,服务配置,服务管理等问题。Nacos 还是 Spring Cloud Alibaba 组件之一,负责服务注册与发现。 最后我们通过一张表格大致了解Eureka、Consul、Zookeeper的异同点。选择什么类型的服务注册与 发现组件可以根据自身项目要求决定。

Eureka基本介绍

服务治理

到底什么是服务治理? SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。 在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂、所以需要进行服务治理,管理服务与服务之间依赖关联,以实现服务调用,负载均衡、容错等,实现服务发现与注册。

服务注册

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

Eureka 两大组件

Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:

Eureka Server:Eureka 服务注册中心,主要用于提供服务注册功能。当微服务启动时,会将自己的服务注册到 Eureka Server。Eureka Server 维护了一个可用服务列表,存储了所有注册到 Eureka Server 的可用服务的信息,这些可用服务可以在 Eureka Server 的管理界面中直观看到。Eureka Client:Eureka 客户端,通常指的是微服务系统中各个微服务,主要用于和 Eureka Server 进行交互。客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在微服务应用启动后,Eureka Client 会向 Eureka Server 发送心跳(默认周期为 30 秒)。若 Eureka Server 在多个心跳周期内没有接收到某个 Eureka Client 的心跳,Eureka Server 将它从可用服务列表中移除(默认 90 秒)。

注:“心跳”指的是一段定时发送的自定义信息,让对方知道自己“存活”,以确保连接的有效性。大部分 CS 架构的应用程序都采用了心跳机制,服务端和客户端都可以发心跳。通常情况下是客户端向服务器端发送心跳包,服务端用于判断客户端是否在线。

搭建Eureka

Eureka端服务注册中心

创建新模块 cloud-eureka-server7001

添加pom依赖

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

com.zyh.springcloud

cloud-api-commons

${project.version}

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-devtools

runtime

true

org.projectlombok

lombok

org.springframework.boot

spring-boot-starter-test

test

junit

junit

yml

registerWithEureka: 是否将自己注册到Eureka服务中,本身就是所有无需注册fetchRegistry : 是否从Eureka中获取注册信息serviceUrlEureka: 客户端与Eureka服务端进行交互的地址

server:

port: 7001

eureka:

instance:

hostname: localhost

client:

register-with-eureka: false

fetchRegistry: false

service-url:

defaultZone: http://localhost:7001/eureka

配置启动类

EnableEurekaServer : 激活Eureka Server端配置

服务中心管理后台

启动服务,然后输入网址http://localhost:7001/

服务提供者

EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者provider

模块cloud-provider-payment8001(参照上一篇文章)

添加pom依赖

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

yml

server:

port: 8001

spring:

application:

name: cloud-payment-service

datasource:

type: com.alibaba.druid.pool.DruidDataSource

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/cloud2022?serverTimezone=Asia/Shanghai&useSSL=true&useUnicode=true&characterEncoding=UTF-8

username: root

password: 123456

mybatis:

mapperLocations: classpath:/mapper/*.xml

type-aliases-package: com.zyh.springcloud.entities

#新增的

eureka:

client:

register-with-eureka: true

fetchRegistry: true

service-url:

defaultZone: http://localhost:7001/eureka

主启动类

添加注解@EnableEurekaClient

测试

我们先启动Eureka,然后再启动这个模块 http://localhost:7001/

服务消费者

EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer

Module:cloud-consumer-order80

添加pom依赖

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

yml

server:

port: 80

spring:

application:

name: cloud-consumer-order80

eureka:

client:

register-with-eureka: true

fetchRegistry: true

service-url:

defaultZone: http://localhost:7001/eureka

主启动类

测试

先要启动EurekaServer,7001服务再要启动服务提供者8001服务和服务消费者80服务eureka服务器

通过postman来测试一下

Eureka中的自我保护机制

微服务第一次注册成功之后,每30秒会发送一次心跳将服务的实例信息注册到注册中心。通知 Eureka Server 该实例仍然存在。如果超过90秒没有发送更新,则服务器将从注册信息中将此服务移除。 Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况 (在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会 将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的 信息,不再删除服务注册表中的数据(也就是不会注销任何微服务) 验证完自我保护机制开启后,并不会马上呈现到web上,而是默认需等待 5 分钟(可以通过 eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分钟后你会看到下面的提示信息:

关闭自我保护 通过设置 eureka.enableSelfPreservation=false 来关闭自我保护功能。

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: