news 2026/4/11 0:46:49

微服务注册中心概要及Eureka简单实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微服务注册中心概要及Eureka简单实现

注册中心

什么是注册中心

这里做一个简单的类比

三个实体

景区:提供服务,通过114注册联系信息

114查号台:负责收录各个景区提供的服务和联系信息,一旦景区电话号发生更改

游客:游览景区,通过114查到景区号码,然后拨打景区电话调用服务

微服务中的注册中心的功能就是114查号台。

有关服务中心的三个实体:

1. 服务提供者Server:一次业务中,被其他微服务调用,也就是对外提供服务者,它会向服务中心注册服务实例,以及URL(可以理解为联系方式),这就是服务注册

2. 服务消费者Client:一次业务中,调用其他微服务,也就是享受服务者,它会先查询注册中心找到对应服务的URL,这就是服务发现,然后调用URL进行调用

3. 服务注册中心Registry:用于保存Server的注册信息,当Server节点发生变更,Registry会同步变更。服务和注册中心使用一定的通信机制例如心跳机制,如果注册中心长时间无法和服务提供者保持联络,就会自动销毁这个服务实例

CAP理论

CAP理论是分布式系统中最基础,也是最关键的理论

C:consistency,一致性,这里的一致性指的是强一致性

A:ability,可用性,对于所有请求都会做出相应,无论对错

P:partition tolerance:分区容错性,在网络分区的情况下仍然可以提供服务

CAP三者无法同时满足,比如,进行一次修改,需要所有节点同步。如果保证可用性,那么暂时没有被同步的节点为了保证可用性,会传回错误信息;如果保证一致性,那么必须所有未更新节点停止对外服务,等待同步完成再重新提供服务

在开发中,P必须满足,而C和A根据业务需要灵活取舍,也就是灵活选择CP架构或者AP架构

常见的注册中心

1. Zookeeper

国内的Java体系,大多集群环境都是依靠zookeeper进行注册功能的开发

2. Eureka

基于NetFlix公司的REST服务开发框架,可以用于服务注册与管理,负载均衡,服务故障转移等工作

3. Nacos

是阿里巴巴的重要组件,除了服务注册,服务发现之外,Nacos还提供配置管理,流量管理,DNS等功能

Eureka简单实现

上一篇文章中,我们创建了两个基于SpringBoot的微服务8080: order-service和、

9090: product-service

我们的目标是前端请求order-service微服务,然后order-service微服务调用product-service微服务,获取product的详细信息,最后由order-service传回包括product的order详细信息。

我们已经成功的搭建了微服务之间的调用,但是问题是URL是写死的,不便于维护和扩展,下面我们将基于Eureka进行改进

Eureka服务的编写

在父工程中创建子工程Eureka,然后修改配置文件pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.spring</groupId> <artifactId>springcloud-Euraka</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>eureka</artifactId> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

随后,修改Eureka服务的application.yml文件

这里要注意,因为我们用本机演示,所以每个微服务的端口号须保持不同,否则会引起端口号冲突

# Eureka相关配置 # Eureka 服务 server: port: 10010 #端口号 spring: application: name: eureka-server eureka: instance: hostname: localhost #ip地址 client: fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false. service-url: # 设置Eureka Server的地址,查询服务和注册服务都需要依赖这个地址 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

随后,按照图示架构重构Eureka模块:

启动Eureka

服务注册——product-service

1. 加入Eureka的依赖

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>

2. 修改配置信息

#Eureka Client eureka: client: service-url: defaultZone: http://127.0.0.1:9090/eureka/

3. 启动测试

输入我们配置的IP+端口号后,可以看到进入了Spring的Eureka服务

在Eureka服务中,我们可以看到我们的product实例:

服务发现——order-service

1. 加入Eureka的依赖

同样的步骤:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>

2. 修改配置信息

server: port: 8080 spring: application: name: cloud-order datasource: url: jdbc:mysql://127.0.0.1:3306/cloud_order?characterEncoding=utf8&useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*Mapper.xml configuration: # 配置打印 MyBatis 执行的 SQL log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true #自动驼峰转换 #Eureka Client eureka: client: service-url: defaultZone: http://127.0.0.1:10010/eureka/

3. 修改远程调用的service代码

public OrderInfo selectOrderInfoById(Integer orderId) { OrderInfo orderInfo = orderMapper.selectOrderInfoById(orderId); // String url="http://127.0.0.1:9090/product/selectProductInfoByProductId?productId="+orderInfo.getProductId(); //根据“clout-product”服务名称,从eureka获取服务 List<ServiceInstance> instances = discoveryClient.getInstances("cloud-product"); //因为我们只有一个服务实例,所以直接get(0)获取URI String uri = instances.get(0).getUri().toString(); log.info("uri:{}",uri); //拼接URL String url = uri + "/product/selectProductInfoByProductId?productId=" + orderInfo.getProductId(); log.info("url:{}",url); //获取、填充product信息 ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class); orderInfo.setProductInfo(productInfo); return orderInfo; }

4. 启动测试

刷新网站后我们可以看到,Eureka已经启动了两个微服务实例

此时,我们就可以基于Eureka进行微服务之间的调用了。

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

俄语西里尔字母识别稳定性测试:HunyuanOCR在东欧市场的潜力

HunyuanOCR在俄语西里尔字母识别中的稳定性表现与东欧市场应用前景 在跨境文档自动化处理日益普及的今天&#xff0c;一个看似微小的技术细节——字母“С”到底是西里尔文还是拉丁文——可能直接决定一份俄语发票解析是否准确。这种字符级的混淆问题&#xff0c;在传统OCR系统…

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

xhEditor粘贴excel数据到站群平台

Word一键转存CMS升级方案 项目背景与需求分析 作为山西软件工程专业的大三学生&#xff0c;我正在给自己的CMS新闻管理系统添加Word一键转存功能。核心需求包括&#xff1a; 富文本粘贴&#xff1a;支持Word内容粘贴并保留完整样式自动上传&#xff1a;图片自动上传到阿里云…

作者头像 李华
网站建设 2026/4/9 20:06:58

HunyuanOCR限流策略说明:防止API滥用保障服务质量

HunyuanOCR限流策略设计与工程实践 在当前AI服务快速普及的背景下&#xff0c;一个高性能OCR系统不仅要“看得清”&#xff0c;更要“扛得住”。腾讯混元团队推出的HunyuanOCR作为一款基于多模态大模型架构的轻量级专家模型&#xff0c;在仅1B参数规模下实现了多项SOTA性能。然…

作者头像 李华
网站建设 2026/4/11 10:16:46

游戏本地化加速:HunyuanOCR提取UI界面文字供翻译团队使用

游戏本地化加速&#xff1a;HunyuanOCR提取UI界面文字供翻译团队使用 在一款新上线的国产MMORPG准备出海时&#xff0c;本地化团队常常面临这样的困境&#xff1a;几十个UI界面、上千条文本散落在各种弹窗、按钮和提示框中&#xff0c;全部嵌入在高分辨率截图里。过去的做法是…

作者头像 李华
网站建设 2026/4/10 18:08:53

HunyuanOCR伦理声明:禁止用于监控、人脸追踪等侵犯隐私场景

HunyuanOCR&#xff1a;轻量端到端多模态OCR的技术突破与伦理边界 在智能办公、跨境交流和数字文档管理日益普及的今天&#xff0c;如何快速准确地从图像中提取结构化信息&#xff0c;已成为许多行业亟待解决的核心问题。传统OCR系统往往依赖复杂的多阶段流水线——先检测文字区…

作者头像 李华
网站建设 2026/4/7 13:41:18

HunyuanOCR商业授权模式说明:个人免费 vs 企业收费政策解读

HunyuanOCR商业授权模式说明&#xff1a;个人免费 vs 企业收费政策解读 在今天这个文档数字化进程不断加速的时代&#xff0c;从一张发票的自动报销&#xff0c;到一份合同的关键信息提取&#xff0c;再到视频中字幕的实时识别——背后都离不开光学字符识别&#xff08;OCR&am…

作者头像 李华