网站首页 > 博客文章 正文
服务注册与发现
微服务应用通常是基于分布式集群部署的,当集群实例达到一定数量时,就不得不做服务治理了。将微服务实例集中管理,需要一个服务注册中心与服务发现组件。微服务实例启动后自动注册到注册中心组件中,注册中心维护与实例的连接关系,所有的实例列表用于服务发现。服务发现可以分为客户端模式与服务端模式。客户端模式首先从服务注册中心获取服务列表,然后在客户端进行服务调用;服务端模式则直接向服务注册中心发送请求,服务注册中心直接调用服务实例并返回结果。本节主要介绍服务注册与发现组件Eureka和Consul的功能。
Eureka组件简介
Eureka是Netflix公司开源的用于服务注册和发现的框架。从2018年7月份开始,Netflix宣布不再维护Eureka开源代码。但是SpringCloud集成了Eureka到子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka分为Eureka Server端与Eureka Client端。Eureka Server端提供服务注册功能,微服务启动后,调用注册接口进行服务注册;
Eureka Server端还会维护所有可用的服务节点信息,同时提供页面,可以查看注册过的服务。Eureka Client端提供与Eureka Server端的交互,它内嵌在微服务中,向Eureka Server端发送心跳检测,提供注册和续租等服务。
Eureka架构如图5.12所示。
下面列举一个简单的Eureka使用示例。
(1)创建一个eureka-server工程,应用需要依赖spring-cloud
starter-netflix-eureka-server包,修改配置文件如下:
eureka:
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://localhost:8080/eureka/
(2)在启动类中添加注解@EnableEurekaServer,然后启动工程。
(3)新建客户端工程eureka-client,应用需要依赖spring
cloud-starter-netflix-eureka-client包,修改配置文件如下:
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka/
(4)在启动类中添加注解@EnableDiscoveryClient,然后启动工程,访问Eureka界面即可看到客户端已经注册到服务端了。
Consul组件简介
Consul是HashiCorp公司推出的开源软件,也可以实现服务注册与服务发现的功能。Consul主要有以下几种特性:
服务发现:服务通过Consul客户端注册到Consul服务端,然后可以通过Consul服务端进行服务发现查询。
健康检查:Consul客户端可以对服务提供相应的健康检查。
数据存储:Consul提供了Key/Vaule存储方式,应用程序可以设置相关的配置数据。
多数据中心:不依赖其他第三方工具即可使用多数据中心。
Consul可分为Server端和Client端两种角色。Server端保存配置、选举和维护状态等复杂的逻辑,Client端负责转发请求到服务端。
Consul使用时需要自己安装,步骤如下:
(1)在官网下载Consul,网址为
https://www.consul.io/downloads.html,然后需要在PATH环境变量中添加安装目录。
(2)执行consul --version命令查看版本,本例使用的是1.8.4版本。
(3)想使用Consul,需要启动Agent。有两种启动方式,一种是server方式,一种是client方式。执行命令如下:
consul agent -server -ui -bootstrap-expect=3 -data
dir=/data/consul
-node=server-1 -client=0.0.0.0 -bind=127.0.0.1 -
datacenter=dc1
(4)启动Agent后,访问Consul的后台管理页面http://localhost:8500/,如图5.13所示。
(5)Spring Boot整合Consul需要依赖spring-cloud-starterconsul-discovery包。另外,
spring-boot-starter-actuator可以提供健康检查。
(6)修改Spring Boot项目的application.yml配置文件如下:
spring:
cloud:
consul:
host: 127.0.0.1
port: 8500
discovery:
service-name: ${spring.application.name}
tags: test=consul
healthCheckPath: /health
healthCheckInterval: 15s
(7)添加@EnableDiscoveryClient注解完成注册,此时可以通过带有负载均衡的LoadBalancerClient客户端获取实例。
猜你喜欢
- 2025-05-26 业务流程管理(BPM)能力框架解读
- 2025-05-26 DeepSpeed v0.16.9重磅发布!解锁全新性能优化与多项关键功能,深
- 2025-05-26 【推荐】一个基于 WPF 开源、美观的通用上位机程序框架
- 2025-05-26 Star 8K的开源 LLM 评估框架 Opik
- 2025-05-26 GEA新能源架构打造,后置单电机驱动,动力响应迅速
- 2025-05-26 GEA新能源架构打造,后置单电机驱动
- 2025-05-26 手把手教你写出不被研发怼的需求文档
- 2025-05-26 智能体真正强的不是模型,而是“看、记、想、动”背后的架构。
- 2025-05-26 互联网大厂中实现微服务架构的方式全解析
- 2025-05-26 扩展到百万用户规模:真希望早点知道的架构设计
你 发表评论:
欢迎- 最近发表
-
- 比GoPro 13更强的大疆Action 5 Pro,到底强在哪里?
- 信号和槽(信号和槽的实现原理)
- 在响应式项目中连接设计与开发(请简述实现响应式设计包括哪些技术点)
- 【C#】委托、Action、Func 和 Event 之间的关系
- 如何使用JavaScript实现Prompt弹窗?
- 谷歌Magic Actions功能曝光:AI革新安卓16通知交互
- 基于目标TPS的性能测试,如何通过手动设置场景进行测试?
- IOS基础学习之输出口和动作(io口输入输出实验总结及体会)
- 《Java语言程序设计》期末考试模拟试题——判断题和问答题
- Android学习之Touch事件的处理(android触摸事件实例)
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)