news 2026/2/11 6:32:30

【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/2/10 10:21:04

Java毕设选题推荐:基于springBoot的高校学生绩点管理系统的设计与实现基于SpringBoot的学生成绩管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/8 22:11:07

Java毕设项目推荐-基于springBoot的高校学生绩点课程学分管理系统的设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/10 19:42:55

PyTorch模型量化压缩:降低token生成延迟,节省GPU资源

PyTorch模型量化压缩&#xff1a;降低token生成延迟&#xff0c;节省GPU资源 在如今的AI应用浪潮中&#xff0c;尤其是大语言模型&#xff08;LLM&#xff09;被广泛用于智能客服、实时翻译和对话系统时&#xff0c;一个核心问题日益凸显&#xff1a;如何让庞大的模型跑得更快、…

作者头像 李华
网站建设 2026/2/6 11:09:44

图的遍历(信息学奥赛一本通- P2124)

【题目描述】给出 N 个点&#xff0c;M 条边的有向图&#xff0c;对于每个点 v&#xff0c;求 A(v) 表示从点 v 出发&#xff0c;能到达的编号最大的点。【输入】第 1 行 2 个整数 N,M&#xff0c;表示点数和边数。接下来 M 行&#xff0c;每行 2 个整数 Ui,Vi&#xff0c;表示…

作者头像 李华
网站建设 2026/2/6 0:15:02

【消息队列项目】客户端搭建与测试

目录 一.广播交换模式下的测试 1.1.生产者消费者代码编写 1.2.测试 二.直接交换模式下的测试 2.1.生产者消费者代码编写 2.2.测试 三.主题交换模式下的测试 3.1.生产者消费者代码编写 3.2.测试 搭建客户端 发布消息的生产者客户端订阅消息的消费者客户端 思想 必须…

作者头像 李华
网站建设 2026/2/8 18:32:30

diskinfo工具监测SSD寿命:保障GPU服务器稳定运行

diskinfo工具监测SSD寿命&#xff1a;保障GPU服务器稳定运行 在现代人工智能基础设施中&#xff0c;GPU服务器早已不再是单纯的“算力盒子”——它是一个集计算、存储与网络于一体的复杂系统。尤其当深度学习模型规模不断膨胀&#xff0c;训练任务动辄持续数天甚至数周时&#…

作者头像 李华