news 2026/5/1 8:44:15

【JavaEE】【SpringCloud】服务注册_Eureka

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【JavaEE】【SpringCloud】服务注册_Eureka

目录

  • 一、服务注册引入
  • 二、 服务注册中心
  • 三、 CAP理论
  • 四、 常见注册中心
  • 五、 Eureka
    • 5.1 搭建注册中心
    • 5.2 服务注册
    • 5.3 服务发现

一、服务注册引入

在上一篇环境与工程搭建,我们远程调用时候写url写死了。

Stringurl="http://127.0.0.1:9090/product/"+orderInfo.getProductId();

当更换服务器的时候,这个url是需要跟着变的。我们这里就需要使用注册中心来解决这个问题。

二、 服务注册中心

注册中心:维护⼀个服务列表,哪个机器上线了,哪个机器宕机了,这些信息都会⾃动更新到服务列表上,客⼾端拿到这个列表,直接进⾏服务调⽤即可。这个就是注册中⼼

注册中⼼主要有三种⻆⾊(以租房为例):

  • 服务提供者(Server):⼀次业务中,被其它微服务调⽤的服务。也就是提供接⼝给其它微服务。(相当于房东)
  • 服务消费者(Client):⼀次业务中,调⽤其它微服务的服务。也就是调⽤其它微服务提供的接⼝。(相当于租客)
  • 服务注册中⼼(Registry):⽤于保存Server 的注册信息,当Server 节点发⽣变更时,Registry 会同步变更。服务与注册中⼼使⽤⼀定机制通信,如果注册中⼼与某服务⻓时间⽆法通信,就会注销该实例。(相当于中介)

关系与工作内容:

  • 服务注册:服务提供者在启动时,向 Registry 注册⾃⾝服务,并向 Registry 定期发送⼼跳汇报存活状态。
  • 服务发现:服务消费者从注册中⼼查询服务提供者的地址,并通过该地址调⽤服务提供者的接⼝。服务发现的⼀个重要作⽤就是提供给服务消费者⼀个可⽤的服务列表。

三、 CAP理论

  • 一致性(Consistency): CAP理论中的⼀致性, 指的是强⼀致性,所有节点在同⼀时间对外具有相同的数据。(弱一致性就是,所有节点对外达到相同数据可以有时间间隔)
  • 可⽤性(Availability):保证每个请求都有响应(响应结果可能不对)
  • 分区容错性(Partition Tolerance):当出现⽹络分区后,系统仍然能够对外提供服务

分布式系统CAP三个属性是不可能同时满足的,系统间的⽹络又不能100%保证健康,服务⼜必须对外保证服务,因此Partition Tolerance(分区容错性)不可避免。那就只能在C和A中选择⼀个。也就是CP或者AP架构。

  • CP架构:为了保证分布式系统对外的数据⼀致性,于是选择不返回任何数据
  • AP架构:为了保证分布式系统的可⽤性,节点间可能返回不同版本的数据(即使这个数据不正确)

四、 常见注册中心

  1. Zookeeper
    Zookeeper的官⽅并没有说它是⼀个注册中⼼,但是国内Java体系,⼤部分的集群环境都是依赖 Zookeeper来完成注册中⼼的功能。
  2. Eureka
    Eureka是Netflix开发的基于REST的服务发现框架,主要⽤于服务注册,管理,负载均衡和服务故障转移。
    官⽅声明在Eureka2.0版本停⽌维护,不建议使⽤。但是Eureka是SpringCloud服务注册/发现的默认实现,所以⽬前还是有很多公司在使⽤。
  3. Nacos
    Nacos是Spring Cloud Alibaba架构中重要的组件,除了服务注册,服务发现功能之外,Nacos还⽀持配置管理,流量管理,DNS,动态DNS等多种特性。

五、 Eureka

Eureka主要分为两个部分:

  • Eureka Server:作为注册中⼼Server端,向微服务应⽤程序提供服务注册,发现,健康检查等能⼒。
  • Eureka Client:服务提供者,服务启动时,会向Eureka Server 注册⾃⼰的信息(IP,端⼝,服务信息等),Eureka Server 会存储这些信息。

5.1 搭建注册中心

我们就使用上一篇文章环境与工程搭建的案例代码来搭建。

  1. 创建Eureka-server ⼦模块

  2. pom中引⼊eureka-server依赖与项目构建插件

<!-- eureka-server依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!-- 项目构建插件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
  1. 完善启动类
packagecom.cloud.eureka;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublicclassEurekaServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EurekaServerApplication.class,args);}}
  1. 配置文件
server:port:10010spring:application:name:eureka-servereureka:instance:hostname:localhostclient:fetch-registry:false# 表⽰是否从Eureka Server获取注册信息,默认为true.因为这是⼀个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这⾥设置为falseregister-with-eureka:false# 表⽰是否将⾃⼰注册到Eureka Server,默认为true.由于当前应⽤就是Eureka Server,故⽽设置为false.service-url:# 设置Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.defaultZone:http://${eureka.instance.hostname}:${server.port}/eureka/
  1. 启动服务,访问注册中心

5.2 服务注册

把product-service 注册到eureka-server中。

  1. 在product-service的pom文件中加上eureka-client的依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
  1. 完善product-service的配置⽂件
spring:application:name:product-serviceeureka:client:service-url:defaultZone:http://127.0.0.1:10010/eureka
  1. 启动服务

5.3 服务发现

修改order-service,在远程调⽤时,从eureka-server拉取product-service的服务信息,实现服务发现

  1. 在order-service的pom文件中加上eureka-client的依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
  1. 完善order-service的配置⽂件
spring:application:name:order-serviceeureka:client:service-url:defaultZone:http://127.0.0.1:10010/eureka
  1. 远程调⽤,修改service
packagecom.cloud.order.service;importcom.cloud.order.mapper.OrderMapper;importcom.cloud.order.model.OrderInfo;importcom.cloud.order.model.ProductInfo;importjakarta.annotation.Resource;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cloud.client.ServiceInstance;importorg.springframework.cloud.client.discovery.DiscoveryClient;importorg.springframework.cloud.netflix.eureka.EurekaServiceInstance;importorg.springframework.stereotype.Service;importorg.springframework.web.client.RestTemplate;importjava.util.List;@Service@Slf4jpublicclassOrderService{@AutowiredprivateOrderMapperorderMapper;@AutowiredprivateRestTemplaterestTemplate;@ResourceprivateDiscoveryClientdiscoveryClient;publicOrderInfoselectOrderById(IntegerorderId){OrderInfoorderInfo=orderMapper.selectOrderById(orderId);//String url = "http://127.0.0.1:9090/product/"+ orderInfo.getProductId();//根据应⽤名称获取服务列表List<ServiceInstance>instances=discoveryClient.getInstances("product-service");//服务可能有多个, 获取第⼀个EurekaServiceInstanceinstance=(EurekaServiceInstance)instances.get(0);log.info(instance.getInstanceId());//拼接urlStringurl=instance.getUri()+"/product/"+orderInfo.getProductId();ProductInfoproductInfo=restTemplate.getForObject(url,ProductInfo.class);orderInfo.setProductInfo(productInfo);returnorderInfo;}}
  1. 启动

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:30:47

HuggingFace Tokenizer高级用法:优化大模型输入处理

HuggingFace Tokenizer高级用法&#xff1a;优化大模型输入处理 在构建现代自然语言处理系统时&#xff0c;一个常被低估但至关重要的环节是——如何高效地将原始文本喂给大模型。我们常常把注意力放在模型架构、训练策略或推理加速上&#xff0c;却忽略了数据预处理这条“第一…

作者头像 李华
网站建设 2026/5/1 8:32:25

PyTorch DataLoader持久化worker:避免重复初始化开销

PyTorch DataLoader持久化worker&#xff1a;避免重复初始化开销 在现代深度学习训练中&#xff0c;GPU算力的提升早已跑赢了数据供给的速度。我们常常看到这样的场景&#xff1a;高端A100显卡的利用率曲线像“心电图”一样剧烈波动——峰值冲到90%以上&#xff0c;下一秒又跌…

作者头像 李华
网站建设 2026/5/1 8:33:33

在POSIX标准中的信号

在POSIX标准中&#xff0c;信号是用于进程间通信、中断处理及事件通知的核心机制&#xff0c;定义了进程对特定事件的响应行为。以下从定义、分类、常见信号及处理机制四方面系统解析&#xff1a;1. 定义与标准背景POSIX信号&#xff1a;遵循IEEE 1003&#xff08;ISO/IEC 9945…

作者头像 李华
网站建设 2026/5/1 7:31:14

《解锁Agentic AI在公共安全应用,提示工程架构师攻略全解》

解锁Agentic AI在公共安全应用&#xff1a;提示工程架构师全攻略 一、引言&#xff1a;凌晨3点的火灾&#xff0c;AI能比人快多少&#xff1f; 凌晨3点&#xff0c;某老旧居民楼的3楼突然冒出浓烟——住户李阿姨的电动车电池在客厅起火了。她惊慌失措地拨打119&#xff0c;语无…

作者头像 李华
网站建设 2026/5/1 7:26:16

Markdown写技术博客必备:记录PyTorch安装与调试全过程

PyTorch-CUDA 镜像实战指南&#xff1a;从安装到高效开发的全链路解析 在深度学习项目启动前&#xff0c;最让人头疼的往往不是模型设计&#xff0c;而是环境配置——明明代码写好了&#xff0c;却因为 libcudart.so 找不到、CUDA 版本不匹配或 PyTorch 编译失败而卡住数小时。…

作者头像 李华
网站建设 2026/5/1 8:18:43

如何查看GPU显存占用?nvidia-smi与PyTorch监控结合使用

如何查看GPU显存占用&#xff1f;nvidia-smi与PyTorch监控结合使用 在深度学习模型训练过程中&#xff0c;你是否遇到过这样的场景&#xff1a;程序运行到一半突然报错 CUDA out of memory&#xff0c;而你明明记得显卡还有不少空闲显存&#xff1f;或者发现模型刚加载完还没开…

作者头像 李华