Spring Boot 中的服务注册是什么,原理,如何使用
Spring Boot 中的服务注册是什么,原理,如何使用
Spring Boot 是一个非常流行的 Java 后端框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发微服务应用。其中,服务注册是 Spring Boot 微服务架构中非常重要的一环。在本文中,我们将深入探讨 Spring Boot 中的服务注册是什么,原理以及如何使用。

什么是服务注册?
服务注册是微服务架构中的核心概念之一,它允许服务提供者将自己的服务注册到注册中心,同时也允许消费者从注册中心获取可用的服务列表。在 Spring Boot 中,服务注册通常采用 Eureka 或 Consul 作为注册中心,这两种注册中心都提供了 RESTful API,用于服务提供者和服务消费者之间的交互。
Eureka 原理
Eureka 是 Netflix 提供的一种服务发现框架,它提供了服务注册和发现功能,支持动态增加和删除服务实例。Eureka 的核心组件包括 Eureka Server 和 Eureka Client。
Eureka Server 是服务注册中心,它负责维护所有可用的服务实例信息。当一个服务提供者启动时,它会向 Eureka Server 发送一个注册请求,Eureka Server 将会将这个服务实例注册到自己的服务实例列表中,同时也会将这个服务实例的信息缓存在本地缓存中。
Eureka Client 是服务提供者的客户端,它负责向 Eureka Server 发送心跳请求,以确保这个服务实例的健康状态。同时,Eureka Client 也会从 Eureka Server 获取可用的服务列表,并缓存在本地缓存中。当另一个服务消费者需要调用这个服务提供者时,它会向 Eureka Client 发送一个服务发现请求,Eureka Client 将会从本地缓存中获取可用的服务列表,并返回给服务消费者。
如何使用 Eureka?
下面我们来看一下如何在 Spring Boot 中使用 Eureka。为了演示简单,我们将创建两个微服务:服务提供者和服务消费者。
创建服务提供者
首先,我们需要创建一个服务提供者。我们可以使用 Spring Initializr 来快速生成一个 Spring Boot 项目,在项目中添加 Eureka 相关依赖。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
然后,我们需要在配置文件中添加 Eureka 相关配置。
spring:application:name: service-provider
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
在服务提供者的代码中,我们需要添加 @EnableDiscoveryClient 注解,以启用 Eureka Client 功能。
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(ServiceProviderApplication.class, args);}@RestControllerclass HelloController {@GetMapping("/hello")public String hello() {return "Hello, world!";}}}
创建服务消费者
接下来,我们需要创建一个服务消费者。同样地,我们可以使用 Spring Initializr 来快速生成一个 Spring Boot 项目,在项目中添加 Eureka 相关依赖。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
然后,我们需要在配置文件中添加 Eureka 相关配置。
spring:application:name: service-consumer
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
在服务消费者的代码中,我们需要添加 @EnableDiscoveryClient 注解,以启用 Eureka Client 功能。然后,我们可以使用 RestTemplate 来调用服务提供者的接口。
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceConsumerApplication {public static void main(String[] args) {SpringApplication.run(ServiceConsumerApplication.class, args);}@RestControllerclass HelloController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/hello")public String hello() {String url = "http://service-provider/hello";return restTemplate.getForObject(url, String.class);}}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}
在上面的代码中,我们使用 @Autowired 注解来注入 RestTemplate 对象,然后在 hello 方法中使用 RestTemplate 来调用服务提供者的接口。需要注意的是,我们使用了 @LoadBalanced 注解来启用负载均衡功能,这样当我们启动多个服务提供者实例时,服务消费者会自动选择一个可用的服务实例来调用。
启动服务
最后,我们需要启动 Eureka Server、服务提供者和服务消费者三个应用。首先,我们需要启动 Eureka Server:
mvn spring-boot:run -pl eureka-server
然后,我们需要分别启动服务提供者和服务消费者:
mvn spring-boot:run -pl service-provider
mvn spring-boot:run -pl service-consumer
启动完成后,我们可以访问服务消费者的接口来调用服务提供者的接口:
curl http://localhost:8080/hello
Consul 原理
除了 Eureka,还有另一种常用的服务注册中心——Consul,它同样提供了服务注册和发现功能,支持多数据中心和健康检查等高级特性。
Consul 的核心组件包括 Consul Server 和 Consul Client。
Consul Server 是服务注册中心,它负责维护所有可用的服务实例信息。当一个服务提供者启动时,它会向 Consul Server 发送一个注册请求,Consul Server 将会将这个服务实例注册到自己的服务实例列表中,同时也会将这个服务实例的信息缓存在本地缓存中。
Consul Client 是服务提供者的客户端,它负责向 Consul Server 发送心跳请求,以确保这个服务实例的健康状态。同时,Consul Client 也会从 Consul Server 获取可用的服务列表,并缓存在本地缓存中。当另一个服务消费者需要调用这个服务提供者时,它会向 Consul Client 发送一个服务发现请求,Consul Client 将会从本地缓存中获取可用的服务列表,并返回给服务消费者。
如何使用 Consul?
与使用 Eureka 类似,我们同样需要创建一个服务提供者和一个服务消费者,然后在配置文件中添加 Consul 相关配置。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
spring:application:name: service-providercloud:consul:host: localhostport: 8500discovery:instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}service-name: ${spring.application.name}
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
spring:application:name: service-consumercloud:consul:host: localhostport: 8500discovery:instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}service-name: ${spring.application.name}
需要注意的是,我们使用了 KaTeX parse error: Expected '}', got 'EOF' at end of input: …on.instance_id:{random.value}} 来为每个服务实例生成一个唯一的实例 ID,这样可以确保每个服务实例都有自己的注册信息。
在服务提供者和服务消费者的代码中,我们需要添加 @
相关文章:
Spring Boot 中的服务注册是什么,原理,如何使用
Spring Boot 中的服务注册是什么,原理,如何使用 Spring Boot 是一个非常流行的 Java 后端框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发微服务应用。其中,服务注册是 Spring Boot 微服务架构中非常…...
spring.factories文件在Spring工程中的说明
说明 spring.factories 是 Spring Boot 框架中一个特殊的配置文件,它用于定义自动配置的实现类以及要注册的其他组件信息。该文件通常位于 META-INF/spring.factories 目录下,Spring Boot 在启动时会自动加载它并读取其中的配置信息。 spring.factorie…...
常见的自动化测试架构有哪些?
目录 前言 常见的自动化架构包括如下。 1.数据驱动测试 2.模块驱动测试 3.关键字驱动测试 优点: 缺点: 总结: 前言 一个自动化测试架构就是一个集成体系,其中定义了一个特殊软件产品的自动化测试规则。这一体系中包含测试…...
Revit中用自适应创建简单的瓦片族和切换构件的材质?
一、Revit中使用自适应创建瓦片族 在我们的日常生活中,屋顶的瓦片是我们经常都能够见到的,瓦片能够挡风遮雨也能够使建筑物带来古香古色的气息,那我们今天来学习如何使用自适应创建简单的瓦片族。 1.首先:我们打开自适应公制常规模…...
Spring Boot实战:拦截器和监听器的应用指南
当使用Spring Boot时,我们可以通过拦截器(Interceptor)和监听器(Listener)来实现对请求和响应的处理。拦截器和监听器提供了一种可插拔的机制,用于在请求处理过程中进行自定义操作,例如记录日志…...
为什么要搭建数据仓库
数据是企业中最重要的资源之一,因此,随着企业数据量的不断增大和复杂度的提高,建立一个可靠和健全的数据仓库变得越来越重要。在数聚股份看来,一个数据仓库可以作为一个企业数据存储和管理系统,能够更有效地存储、管理…...
Sql Server 获取连续日期时间
获取连续日期时间 在项目中,有时候需要按日期/时间统计,例如2023-06-21至2023-06-28期间每一天的数据,如果某一天没有数据,也要查询出来,用NULL处理。 1.示例 2.连续日期效果SQL DECLARE StartDate DATE 2023-06-2…...
MIT 6.830数据库系统 -- lab two
MIT 6.830数据库系统 -- lab two 项目拉取Lab Two实现提示练习一 -- Filter and Join练习二 -- Aggregates练习三 -- HeapFile Mutability练习四 -- Insertion & deletion练习五 -- Page eviction练习六 -- Query walkthrough练习七 - 查询解析 项目拉取 原项目使用ant进行…...
React基础知识点(一)
React基础知识点 目标 能够说出React是什么能够说出React的特点能够掌握React的基本使用能够使用React脚手架 什么是React (★★★) React是一个用于构建用户界面的javaScript库,起源于facebook的内部项目,后续在13年开源了出…...
机器学习-进化算法
进化算法 遗传算法(Genetic Algorithm,GA)crossovermutation 进化策略(Evolutionary Strategies,ES)基因编程(Genetic Programming)Multi-objective Evolutionary Algorithms 遗传算…...
leetcode 637. 二叉树的层平均值
2023.6.29 依旧是层序遍历的变体,在层序遍历的代码中的内层循环求个和,然后出循环之后取个平均值即可实现层平均值,下面上代码: class Solution { public:vector<double> averageOfLevels(TreeNode* root) {vector<doub…...
7-数组创建函数还有哪些?【视频版】
目录 问题视频解答 问题 视频解答 点击观看: 7-数组创建函数还有哪些?...
webrtc源码阅读之P2P流程分析
P2P从宏观原理上其实就是: 收集本地Candidates设置远程Candidates连通性测试及排序 本文我们从Offer端的角度进行源码分析,学习webrtc是如何进行P2P连接的。版本m98。 一、收集本地Candidates examples/peerconnection中,CreateOffer以后&…...
vscode 快速修复(quick fix) 快捷键(Ctrl + .)被占用问题解决方法
vscode 快速修复(quick fix) 快捷键(Ctrl .)被占用 微软拼音的中/英文标点切换的快捷键为Ctrl .,与 vscode 快速修复(quick fix)快捷键冲突。修复方法如下: 切换到微软拼音,在输入法中或英字上,点击右键。 再点设置 - 按键。 …...
阿里云——扩展Linux系统盘
扩展分区和文件系统_Linux系统盘 {#concept_ocb_htw_dhb .concept} 本文提供了如何使用growpart和resize2fs工具完成Linux系统盘分区扩容及文件系统扩展的操作指导。 适用范围 {#section_u9c_3g5_ljs .section} 本文的操作步骤适用于以下分区和文件系统格式的云盘࿱…...
TypeScript ~ 掌握基本类型 ②
作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…...
【Zookeeper】win安装随笔
目录 下载地址下载目标解压后目录结构配置文件配置文件详情伪分布式安装LinuxZooKeeper audit is disabled启动解决报错:SLF4J: Class path contains multiple SLF4J bindings. _ 下载地址 https://zookeeper.apache.org/releases.html 下载目标 记住选择带bin的…...
Unity 之 最新原生广告Ads接入 -- 助力增长游戏收益
Unity 之 最新Ads原生广告接入流程详解和工具类分享 一,注册 Unity Ads 广告 SDK二,下载 Unity Ads 广告 SDK三,配置 Unity Ads 广告 SDK3.1 广告位展示流程3.2 代码初始化 四,集成 Unity Ads 广告 SDK4.1 相关介绍4.2 代码分享 五…...
ChatGPT是否可以进行逻辑推理?
ChatGPT在逻辑推理方面的能力存在一定的限制。虽然它可以处理一些简单的逻辑问题,但由于其基于统计模型和语言模式的生成方式,它在复杂的逻辑推理和推断任务上可能会遇到挑战。以下是对ChatGPT在逻辑推理方面能力的详细分析: 1. 基于统计模型…...
TP6在composer包里写控制器
前提:首先要了解下如何自建composer包。 1.先建一个空包,加一个文件:composer.json {"name": "test/ctrs","type": "library","license": "MIT","autoload": {&quo…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
