news 2026/5/1 2:43:01

微服务注册中心概要及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/28 18:50:57

提升OCR效率新选择:HunyuanOCR与vLLM结合的API接口调用实践

提升OCR效率新选择&#xff1a;HunyuanOCR与vLLM结合的API接口调用实践 在智能办公、跨境电商业务激增的今天&#xff0c;文档数字化的需求正以前所未有的速度增长。发票识别、合同信息提取、多语言翻译……这些看似简单的任务背后&#xff0c;往往隐藏着复杂的图像处理和语义理…

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

C037基于博途西门子1200PLC全自动洗衣机控制系统仿真

C037基于博途西门子1200PLC全自动洗衣机控制系统仿真 C037全自动洗衣机S71200HMI主电路图外部接线图IO分配表参考文章 资料包含&#xff1a; 1.程序和HMI仿真工程&#xff08;博图V17及以上版本可以打开&#xff09; 2.PLC端口定义IO分配表1份 3.PLC外部接线图CAD版本和PDF版本…

作者头像 李华
网站建设 2026/4/23 16:57:57

电视剧剧本比对系统:HunyuanOCR检测抄袭与原创性评估工具

电视剧剧本比对系统&#xff1a;HunyuanOCR检测抄袭与原创性评估工具 在影视创作空前活跃的今天&#xff0c;一个令人头疼的问题正日益凸显——剧本抄袭与“洗稿”泛滥。从热门网剧到院线电影&#xff0c;原创作者屡屡陷入维权困境&#xff0c;而版权方则苦于难以快速、准确地识…

作者头像 李华
网站建设 2026/4/28 7:04:03

东南亚市场适配:HunyuanOCR能否识别泰语、越南语声调符号?

东南亚市场适配&#xff1a;HunyuanOCR能否识别泰语、越南语声调符号&#xff1f; 在跨境金融、国际物流和多语言政务系统日益普及的今天&#xff0c;一个看似微小的技术细节——声调符号是否被正确识别——可能直接决定一份合同的理解是否准确、一张发票能否通过自动化审核。尤…

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

HunyuanOCR v1.1新特性预告:新增方言语音合成联动功能

HunyuanOCR v1.1新特性&#xff1a;从“看懂文字”到“说出方言”的跨越 在智能设备日益渗透日常生活的今天&#xff0c;一个看似简单的场景却频频暴露技术短板&#xff1a;一位四川老人拿着药盒拍照&#xff0c;希望手机能告诉他怎么吃&#xff0c;结果AI识别出文字后只用标准…

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

SpringMVC大文件上传解决方案是否支持断点续传与秒传

一个大三狗的文件管理系统历险记 大家好&#xff0c;我是福州某校软件工程专业的大三狗&#xff0c;眼看毕业季来临&#xff0c;我决定做个"惊天地泣鬼神"的文件管理系统当毕业设计&#xff08;主要是为了找工作时有东西可以吹&#xff09;。 我的"异想天开&q…

作者头像 李华