服务注册中心 Eureka

服务注册中心 Eureka

Spring Cloud Eureka 是 Netflix 公司开发的注册发现组件,本身是一个基于 REST 的服务。提供注册与发现,同时还提供了负载均衡、故障转移等能力。

Eureka 有 3 个角色

在这里插入图片描述

  • 服务中心(Eureka Server):服务器端。它提供服务的注册和发现功能,即实现服务的治理。
  • 服务提供者(Service Provider):服务提供者。它将自身服务注册到 服务中心,以便 服务消费者 能够通过服务器提供的服务清单(服务注册列表)来调用它。
  • 服务消费者(Service Consumer):服务消费者。它从 服务中心 获取已注册的服务列表,从而消费服务。

Eureka 是 AP 架构(可用性和分区容错性),Zookeeper 是 CP 架构(一致性和分区容错性)。Eueka 优先保证服务的可用性,Zookeeper 在 Master 节点因为网络故障与其他节点失去联系时,剩余节点选取 leader 的时间太长,这就导致在选举期间注册服务瘫痪。

1. 搭建单机Eureka注册中心

首先需要创建一个 spring-cloud 工程,删除 src 目录,然后在 pom.xml 文件中加入以下依赖:

<!-- 统一管理jar包版本 -->
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spring-cloud.version>2021.0.0</spring-cloud.version><spring-boot.version>2.6.3</spring-boot.version>
</properties>
<!-- 子模块继承之后,提供作用:锁定版本,子modlue不用写groupId和version -->
<dependencyManagement><dependencies><!--spring boot 2.6.3--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud 2021.0.0--><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>

创建 eureka-server-7001 模块,然后在 pom.xml 文件中加入以下依赖:

<!--  服务注册发现Eureka-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

写 application.yaml 配置文件,具体如下:

server:port: 7001
eureka:instance:# eureka服务端的实例名字hostname: localhostclient:# 是否将自己注册到eureka serverregister-with-eureka: false# 是否从eureka server获取注册的服务信息fetch-registry: false# 设置与eureka server交互的地址service-url:defalutZone: http://${eureka.instance.hostname}:${server.port}/eureka/

最后在启动类上加上 @EnableEurekaServer 注解即可

@EnableEurekaServer

启动访问 localhost:7001 即可访问到 Eureka 注册中心的界面。

2. 创建服务提供者与服务消费者

创建服务提供者 provider-8001服务消费者 consumer-80 模块,然后在 pom.xml 文件中加入以下依赖:

<!--   引入Eureka 客户端依赖     -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

服务提供者和消费者的依赖是一样的,都是 eureka-client。

写 application.yaml 配置文件,具体如下:

server:port: 8001
spring:application:name: cloud-provider-8001
eureka:client:# eureka服务地址service-url:defaultZone: http://localhost:7001/eureka/
server:port: 80
spring:application:name: cloud-consumer-80
eureka:client:service-url:defaultZone: http://localhost:7001/eureka/

最后在启动类上面加 @EnableEurekaClient 注解即可。

@EnableEurekaClient

先启动 Eureka 注册中心,然后在分别启动服务提供者和服务消费者,即可在 Eureka 服务注册中心看到相关信息。

3. Eureka 注册中心界面说明

访问上面我们搭建的注册中心(localhost:7001),界面如下:

在这里插入图片描述

其中最重要的是中间服务信息的那一栏,实例的状态有以下几种:

  • UP:服务正常运行,特殊情况当进入自我保护模式,所有的服务依然是 UP 状态,所以需要做好熔断重试等容错机制应对灾难性网络出错情况
  • OUT_OF_SERVICE:不再提供服务,其他的 Eureka Client 将调用不到该服务,一般有人为的调用接口设置的,如:强制下线。
  • UNKNOWN:未知状态
  • STARTING:表示服务正在启动中
  • DOWN:表示服务已经宕机,无法继续提供服务

4. 服务自保和服务剔除机制

服务自保机制(Service Self-Preservation Mechanism):是指 Eureka Server 中的一种机制,用于保护在 Eureka 注册中心上注册的微服务实例免受意外删除的影响。当微服务实例在心跳超时时间内没有发送心跳信号给 Eureka Server 时,Eureka Server 不会立即将其从服务注册表中删除,而是认为该实例可能处于网络故障等临时异常情况,会将其保留在注册表中,提供一定的自我保护,防止误删健康的实例。这样可以避免因网络抖动、服务器负载或其他临时问题导致服务实例被误删,从而提高服务的稳定性和可用性。

服务剔除机制(Service Eviction Mechanism):与服务自保相对应,是指当服务实例连续长时间未发送心跳信号、或注册中心发现某个服务实例心跳连续失败的次数超过一定阈值时,Eureka Server 会将该服务实例从服务注册表中剔除。通过服务剔除机制,可以排除不健康、异常或故障状态的服务实例,防止其他服务继续调用故障的实例,减少错误的传播范围,提高系统的稳定性。

Eureka 中的服务自保机制是为了保护健康、可能出现临时异常的服务实例免受误删的影响,而服务剔除机制则是为了及时剔除不健康、长时间未发送心跳或心跳连续失败的服务实例,保障整个服务治理系统的正常运行。这两个机制的存在都是为了提高服务的可靠性和稳定性。

服务自保是默认开启的,可以使用以下配置来关闭,在 Eureka Server 的 application.yaml 配置文件中加入以下配置:

eureka:  server:# 参数来关闭保护机制,已确保注册中心可以将不可用的实例正确剔除,默认为trueenable-self-preservation: false

5. Actuator 微服务信息完善

SpringCloud 体系里的服务实体向 Eureka 注册时,注册名默认是 IP名:应用名:应用端口名

我们可以通过 actuator 来修改完善注册名,在服务提供者或消费者的 pom.xml 文件中加入以下配置:

<!-- actuator监控信息完善 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

然后在 application.yaml 配置文件中加入以下配置:

eureka:instance:# 实例名称instance-id: cloud-consumer01-80

6. 服务注册发现 Discovery

注册进入 Eureka 里面的微服务,可以通过服务发现来获取该服务的信息。

在服务提供者模块controller类,具体如下:

@Slf4j
@RestController
@RequestMapping("/provider")
public class ProviderController {@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/discovery")public Object discovery() {// 获取所有微服务信息List<String> services = discoveryClient.getServices();for (String service : services) {log.info("service:={}", service);}return this.discoveryClient;}/*** 供消费者调用*/@GetMapping("/index")public String getMsg() {return "success";}
}

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange() 以及 execute()。

在服务消费者模块中添加配置类,具体如下:

@Configuration
public class CloudConfig {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

最后在服务消费者模块添加对应调用方法,具体如下:

@RestController
@RequestMapping("/consumer")
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/index")public String index() {// 远程微服务调用地址: 微服务名称String host = "http://cloud-provider-8001";// 具体URLString url = "/provider/index";// 发起远程调用// getForObject: 返回响应体中数据转化成的对象, 可以理解为json// getForEntity: 返回的是ResponseEntity的对象包含了一些重要的信息return restTemplate.getForObject(host + url, String.class);}
}

浏览器访问:http://localhost:80/consumer/index 地址,即出现在服务提供者模块中返回的 “success” 字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/106577.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ensp+Wireshark+VirtualBox+WinPcap

软件下载 [名称]&#xff1a;Ensp及辅助程序 [大小]&#xff1a;830.65MB [语言]&#xff1a;Chinese [安装环境]&#xff1a;Win7/Win8/Win10 [下载链接]&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1KbypgxAGQy07ijSAj3SvsQ 提取码&#xff1a;ly88 软件介…

服务器数据恢复-EVA存储磁盘故障导致存储崩溃的数据恢复案例

EVA系列存储是一款以虚拟化存储为实现目的的中高端存储设备。EVA存储中的数据在EVA存储设备工作过程中会不断进行迁移&#xff0c;如果运行的任务比较复杂&#xff0c;EVA存储磁盘负载加重&#xff0c;很容易出现故障的。EVA存储通过大量磁盘的冗余空间和故障后rss冗余磁盘动态…

Netty核心源码解析(三)--NioEventLoop

NioEventLoop介绍 NioEventLoop继承SingleThreadEventLoop,核心是一个单例线程池,可以理解为单线程,这也是Netty解决线程并发问题的最根本思路--同一个channel连接上的IO事件只由一个线程来处理,NioEventLoop中的单例线程池轮询事件队列,有新的IO事件或者用户提交的task时便执…

第二讲Java基本语法(变量、数据类型、运算符)

一、前言导读 上一讲,我们安装java的开发工具idea,并且简单介绍如何使用,初步认识了Java的helloworld,我们写了第一行代码,有了初步的印象,接下来我们将真正展开对于java的了解,从这一讲开始,请大家做好笔记,改背的背。为什么说Java是一门编程语言呢,主要是他跟英语一…

php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)

array_multisort()和array_column()联用效果直接叠满,11>100 先来看下两个函数的介绍和用法 array_column(): 一般模式,不需要其中字段作为id,只需要提取val值 <?php // 可能从数据库中返回数组 $a [[id > 5698, first_name > Peter, last_name > G…

windows10 docker 安装在D盘

win10安装docker后发现c盘空间急速减少&#xff0c;360管家查看发现images镜像安装在C盘&#xff0c;于是重装docker desktop以为在安装过程中能够选择&#xff0c;遗憾的是没有提供选择权限&#xff0c;默认直接就安装到了c盘。 desktop 迁移 百度得知可以将c盘的docker安装…

VUE笔记(六)vue路由

一、路由的简介 1、实现生活中的路由 路由&#xff1a;路由其实就是一个key-value对应关系 路由器&#xff1a;用于管理多个路由关系的设备被称为路由器 2、前端的路由 目前使用的前端项目都是单页面的应用&#xff08;SPA&#xff09;&#xff0c;一个项目中只有一个html页…

Open3D 点云中值滤波

目录 一、算法原理1、中值滤波2、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、中值滤波 中值滤波的方法是,对待处理的当前采样点,选择一个模板,该模…

牛客练习赛 114

C.Kevin的七彩旗 思路&#xff1a;贪心和dp均可以解决。 贪心&#xff1a;我们可以发现&#xff0c;最终想要获得合法的序列&#xff0c;我们必须是通过把几段连续的序列拼凑起来&#xff0c;但序列之间可能有重合&#xff0c;因此我们就转化为了&#xff0c;记录每一段最大的…

如何评估分类模型的好坏

如何评估分类模型的好坏 评估分类预测模型的质量&#xff0c;常用一个矩阵、三条曲线和六个指标。 一个矩阵&#xff1a;混淆矩阵&#xff1b;三条曲线&#xff1a;ROC曲线、PR曲线、KS曲线&#xff1b;六个指标&#xff1a;正确率Acc、查全率R、查准率P、F值、AUC、BEP值、KS…

Wireshark数据抓包分析之UDP协议

一、实验目的&#xff1a; 通过使用wireshark对UDP数据包的抓取分析UDP协议的内容 二、预备知识&#xff1a; UDP协议的概念&#xff1a;UDP使用底层的互联网协议来传送报文&#xff0c;同IP一样提供不可靠的无连接传输服务。它也不提供报文到达确认、排序及流量控制等功能。 …

【C++心愿便利店】No.3---内联函数、auto、范围for、nullptr

文章目录 前言&#x1f31f;一、内联函数&#x1f30f;1.1.面试题&#x1f30f;1.2.内联函数概念&#x1f30f;1.3.内联函数特性 &#x1f31f;二、auto关键字&#x1f30f;2.1.类型别名思考&#x1f30f;2.2.auto简介&#x1f30f;2.3.auto的使用细节&#x1f30f;2.4.auto不能…

stm32之8.中断

&#xff08;Exceptions&#xff09;异常是导致程序流更改的事件&#xff0c;发生这种情况&#xff0c;处理器将挂起当前执行的任务&#xff0c;并执行程序的一部分&#xff0c;称之为异常处理函数。在完成异常处理程序的执行之后&#xff0c;处理器将恢复正常的程序执行&#…

家长如何将ChatGPT成为家庭日常活动的得力助手

人工智能已经在许多领域发挥作用&#xff0c;如播放音乐、关闭灯光和帮助我们更安全地驾驶。那么&#xff0c;在养育孩子方面呢&#xff1f; 使用像ChatGPT这样的应用&#xff0c;家长们可以更好地完成任务&#xff0c;但同时也要了解其中存在的风险。 许多家长表示&#xff…

TCP拥塞控制详解 | 7. 超越TCP

网络传输问题本质上是对网络资源的共享和复用问题&#xff0c;因此拥塞控制是网络工程领域的核心问题之一&#xff0c;并且随着互联网和数据中心流量的爆炸式增长&#xff0c;相关算法和机制出现了很多创新&#xff0c;本系列是免费电子书《TCP Congestion Control: A Systems …

uniapp 微信小程序:RecorderManager 录音DEMO

uniapp 微信小程序&#xff1a;RecorderManager 录音DEMO 简介index.vue参考资料 简介 使用 RecorderManager 实现录音。及相关的基本操作。&#xff08;获取文件信息&#xff0c;上传文件&#xff09; 此图包含Demo中用于上传测试的服务端程序upload.exe&#xff0c;下载后用…

sql server 快速安装

目录标题 一、下载二、直接选择基本安装二、下载ssms&#xff08;数据库图形化操作页面&#xff09;三、开启sa账号认证&#xff08;一&#xff09;第一步&#xff1a;更改身份验证模式&#xff08;二&#xff09;第二步&#xff1a;启用 sa 登录四、开启tcp/ip 一、下载 下载…

Leetcode80. 删除有序数组中的重复项 II

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 class Solu…

Linux内核学习(九)—— 虚拟文件系统(基于Linux 2.6内核)

虚拟文件系统&#xff08;VFS&#xff09;作为内核子系统&#xff0c;为用户空间程序提供了文件和文件系统相关的接口。通过虚拟文件系统&#xff0c;程序可以利用标准的 Unix 系统调用对不同的文件系统&#xff08;甚至不同介质上的文件系统&#xff09;进行读写操作。 一、通…

❤ 给自己的mac系统上安装java环境

❤ 给自己的mac系统上安装java环境 &#x1f353; 作为前端工程师如何给自己的mac系统上安装java环境 &#x1f34e; 最近因为自己的一些项目需求&#xff0c;mac电脑上需要安装一些后台的java环境&#xff0c;用来跑后台的java程序&#xff0c;于是从一个前端工程师的角度安…