news 2026/4/12 18:27:03

【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/4/10 23:13:51

PyTorch DataLoader多线程加载数据:提升GPU利用率

PyTorch DataLoader多线程加载数据&#xff1a;提升GPU利用率 在现代深度学习训练中&#xff0c;一个常见的怪象是&#xff1a;明明配备了A100这样的顶级GPU&#xff0c;监控工具却显示利用率长期徘徊在30%以下。计算资源闲置的同时&#xff0c;实验进度被严重拖慢——这背后往…

作者头像 李华
网站建设 2026/4/9 15:32:23

Docker Compose编排多个PyTorch服务:实现多任务并行处理

Docker Compose编排多个PyTorch服务&#xff1a;实现多任务并行处理 在现代AI系统开发中&#xff0c;一个常见的挑战是&#xff1a;如何在一个有限的硬件资源上&#xff0c;同时运行图像分类、目标检测、语义分割等多个深度学习模型&#xff1f;手动切换环境、反复安装依赖、GP…

作者头像 李华
网站建设 2026/4/12 10:20:01

使用PbootCMS制作网站如何免费做好防护

一、前期准备&#xff1a;备份与版本升级&#xff08;关键第一步&#xff09; 1. 全量备份&#xff08;避免操作失误&#xff09; 登录宝塔面板→【网站】 →【备份】→【立即备份】&#xff08;备份网站文件数据库&#xff09;。额外备份&#xff1a;通过阿里云控制台→【OS…

作者头像 李华
网站建设 2026/4/9 6:50:39

Markdown制作幻灯片:用于PyTorch项目汇报展示

Markdown制作幻灯片&#xff1a;用于PyTorch项目汇报展示 在深度学习项目的日常推进中&#xff0c;一个常被忽视却极为耗时的环节&#xff0c;是将实验结果整理成一份清晰、专业且可复现的汇报材料。许多团队仍依赖 PowerPoint 手动拼接截图、复制指标、调整排版——这一过程不…

作者头像 李华
网站建设 2026/4/11 23:28:00

GitHub Actions持续集成PyTorch模型测试用例

GitHub Actions 持续集成 PyTorch 模型测试用例 在现代深度学习项目中&#xff0c;代码提交后“本地能跑但上线报错”的尴尬场景屡见不鲜。尤其当模型涉及 GPU 加速、分布式训练或混合精度推理时&#xff0c;仅靠 CPU 环境的 CI 测试已远远不够。如何确保每一次 git push 都不会…

作者头像 李华