Spring Cloud学习笔记【服务注册与发现-Eureka】
迪丽瓦拉
2025-05-28 15:02:09
0

文章目录

  • 什么是服务治理
  • 什么是服务注册与发现
  • Eureka两组件
  • Eureka搭建
    • 搭建单机Eureka Server
    • Eureka客户端注册
      • user服务
      • user服务
    • 单点测试
    • 搭建集群Eureka Server
    • 集群启动测试
    • 子服务集群搭建
    • 服务调用和负载均衡
  • 测试效果

什么是服务治理

服务治理是一种管理和控制分布式系统中各个服务的方法。在分布式系统中,各个服务可能由不同的团队或公司开发、维护和部署,因此需要一种机制来确保服务之间的互操作性和稳定性。
服务治理包括以下方面:

  • 服务注册与发现:服务提供者可以将其服务注册到服务注册中心,服务消费者可以从注册中心中发现需要的服务。
  • 负载均衡:服务治理可以根据不同服务的负载情况,将请求分配到不同的服务实例上,以避免某些服务实例过载或负载过轻。
  • 熔断与降级:当某个服务出现故障或响应缓慢时,服务治理可以通过熔断或降级的方式,防止故障或延迟的服务对整个系统的影响。
  • API 管理:服务治理可以对服务的 API 进行管理和限制,防止服务提供者滥用 API,同时保护服务消费者的数据安全。
  • 监控与报警:服务治理可以对服务的运行状态进行监控和报警,及时发现和处理潜在问题,保障系统的稳定性和可靠性。

服务治理是一种重要的分布式系统管理方法,能够有效提升系统的可靠性和可维护性,降低系统的运维成本。

什么是服务注册与发现

服务注册与发现是微服务架构中非常重要的一环,它解决了服务之间的通信问题。在分布式系统中,服务提供者需要将自己的服务信息注册到服务注册中心中,而服务消费者则可以从服务注册中心获取需要调用的服务信息,从而实现服务之间的通信。服务注册中心可以看作是服务的“黄页”,包含了服务提供者的名称、地址、端口号等信息,服务消费者可以通过查询服务注册中心来获取服务提供者的信息。

从Eureka的角度来说,服务注册就是将服务提供者的信息注册到Eureka注册中心中。服务提供者需要在启动时向Eureka注册中心发送注册请求,将自己的服务信息(如服务名称、IP地址、端口号等)注册到Eureka中。服务注册中心会将这些服务信息保存起来,供其他服务消费者使用。服务发现则是服务消费者从Eureka注册中心获取需要调用的服务信息。服务消费者可以通过Eureka注册中心的REST API查询服务提供者的信息,从而实现服务之间的调用。

Eureka的服务注册与发现机制可以实现服务的动态扩容和缩容,当服务提供者的实例数量发生变化时,Eureka可以自动更新注册中心的服务信息,服务消费者可以获取最新的服务信息,从而保证服务的可用性。Eureka还提供了自我保护机制,当服务提供者出现故障或网络波动时,Eureka可以自动进行恢复和剔除不可用的服务,从而提高服务的可靠性和健壮性。
在这里插入图片描述

Eureka两组件

Eureka由两个主要组件组成:

  • Eureka Server:Eureka服务器是服务注册中心,所有的服务实例都需要向Eureka服务器注册自己的信息,并定时向Eureka服务器发送心跳以维持注册信息的有效性。Eureka服务器维护了所有服务实例的注册信息,并提供了REST API接口供客户端查询服务信息。

  • Eureka Client:Eureka客户端是服务提供者和服务消费者,服务提供者在启动时向Eureka服务器注册自己的服务信息,并定时发送心跳以保持注册信息的有效性。服务消费者通过Eureka客户端查询服务提供者的信息,并通过负载均衡算法选择其中一个服务提供者进行调用。

Eureka Server和Eureka Client之间可以建立多个集群,以实现高可用性和容错性。Eureka服务器之间会相互注册,形成一个互相连接的集群。Eureka客户端在查询服务时,会优先查询本地的Eureka服务器,如果本地的Eureka服务器没有相应的服务实例,则会查询其他Eureka服务器上的注册信息。Eureka还提供了一些高级特性,如安全认证、自我保护机制、多数据中心支持等,以满足不同场景下的需求。

Eureka搭建

搭建单机Eureka Server

新建module cloud-eureka-server7001
在这里插入图片描述
pom.xml

org.springframework.cloudspring-cloud-starter-netflix-eureka-serverorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.springframework.bootspring-boot-devtoolsruntimetrueorg.projectlomboklombokorg.springframework.bootspring-boot-starter-testtestjunitjunit

application.yml

server:port: 7001eureka:instance:hostname: localhost #eureka服务端的实例名称client:#false表示不向注册中心注册自己。register-with-eureka: false#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务fetch-registry: falseservice-url:#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动类Eureka7001Application

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

启动测试
访问http://localhost:7001/显示如下,说明eureka server启动成功
在这里插入图片描述
接下来,我们将服务注册进来

Eureka客户端注册

将我们之前的两个demo服务auth和user进行改造,注册到Eureka中。

user服务

pom.xml添加eureka-client的依赖


org.springframework.cloudspring-cloud-starter-netflix-eureka-client

application.yml添加eureka配置

eureka:instance:# 配置eureka的状态显示hostname: localhostinstance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}client:#表示是否将自己注册进EurekaServer默认为true。register-with-eureka: true#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡fetchRegistry: trueservice-url:defaultZone: http://localhost:7001/eureka

启动类添加注解

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

user服务

配置和auth一一样,我就不具体写了

单点测试

先启动Eureka7001Application 服务端;
然后启动两个Eureka客户端。
在这里插入图片描述
服务注册成功

搭建集群Eureka Server

搭建Eureka注册中心集群 ,实现负载均衡+故障容错
参考cloud-eureka-server7001,新建cloud-eureka-server7002

修改host文件C:\Windows\System32\drivers\etc,添加映射,将实例名区分开,方便看到效果

  • 127.0.0.1 eureka7001.com
  • 127.0.0.1 eureka7002.com

修改application.yml
host名字修改:改为上面的假域名
defaultZone修改:将除自己以外的其他eureka节点都写进去,现在写了一个,后续如果多台eureka节点都加上用逗号分隔。
7001服务:
在这里插入图片描述
7002服务:
在这里插入图片描述

集群启动测试

在这里插入图片描述

子服务集群搭建

将user服务改造成集群,测试auth通过服务名,调用user的多台服务。

  • 参照user服务,新增一个user2的module
    在这里插入图片描述
    application.yml的端口有所区分,其他都一样
    在这里插入图片描述
  • 再将所有子服务的地址改为集群地址,用逗号隔开
    在这里插入图片描述
  • 启动所有的服务,注意顺序 先启动eureka server
    在这里插入图片描述
    看到三个服务都注册成功

服务调用和负载均衡

上期,auth调用user服务实际是写死的。
在这里插入图片描述

  • 现在我们改成通过在eureka上注册过的微服务名称调用
    在这里插入图片描述
  • 由于该服务是集群,LF-USER下有多个服务(9001端口和9011端口的服务),需要使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力,默认应该是轮询9001端口和9011端口的服务。同时在返回信息加上端口号,方便测试。
@Configuration
public class ApplicationContextConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}

测试效果

第一次请求:
在这里插入图片描述
第二次请求:
在这里插入图片描述
至此负载均衡效果达到,9001/9002端口交替出现

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...