Spring Cloud的那些组件和功能,get到了吗

news2024/11/18 6:21:19

Spring Cloud 是 Spring 技术栈生态很重要的一部分,面向大型网站服务端的开发和架构设计,它以 Spring/SpringBoot 为基础,提供的一系列组件规范和具体实现。

一、概述

Spring Cloud 提供了用于更快速构建分布式系统的基础规范(例如配置中心、服务发现、熔断器等)。基于 Spring Cloud 规范可以快速实现这些组件和功能,我们常用的分布式系统框架实现方案有以下三种:

  • Spring Cloud Netflix(停止维护)
  • Spring Cloud Alibaba
  • Spring Cloud Official(官方组件)

上述实现方案按技术更新时间排序。

文章教程都是基于 Spring Cloud Hoxton.RELEASE 或以上版本。

二、简述分布式系统

在后端服务中,随着业务量的增长,简单的单体服务已经很难满足需求,大型网站往往会演进到微服务分布式架构模式。

从单体服务系统到分布式系统,相当于实例数从 1 到 ∞ 的一次发展,这种量级的扩展,给开发和运维带来了很大难度。

为了解决升级分布式系统带来的问题,于是有了一系列分布式系统的规范和组件,Spring Cloud 既提供了解决方案规范,也提供了开箱即用的落地实现。

分布式系统常用组件:

  • 配置中心
  • 服务注册与服务发现
  • 路由管理(微服务网关)
  • 服务调用
  • 负载均衡
  • 熔断器
  • 分布式事务
  • 消息队列
  • 任务调度
  • 指标监控
  • 链路追踪
  • 日志采集

三、常用组件

Spring Cloud 组件常用的三种实现方案如下,按自己的业务需求选择,没有更好的,只有更合适的。

组件Spring Cloud NetflixSpring Cloud AlibabaSpring Cloud Official
配置中心-NacosSpring Cloud Config / Spring Cloud Consul
服务注册EurekaNacosSpring Cloud Consul
路由管理Zuul-Spring Cloud Gateway
服务调用FeignDubboSpring Cloud OpenFeign
负载均衡RibbonDubbo LBSpring Cloud LoadBalancer
熔断器HystrixSentinelSpring Cloud Circuit Breaker - Resilience4J
分布式事务-Seata-

表格可以左右滑动

其他组件常用实现:

消息队列:Kafka、RocketMQ、Nats

指标监控:Micrometer、Prometheus

链路追踪:Spring Cloud Sleuth、Zipkin

日志采集:ELK 技术栈、FileBeat

四、上下文使用

SpringCloud 应用会创建一个 bootstrap 上下文容器,作为 SpringBoot 应用的父容器。父容器负责加载外部的配置属性(例如配置中心的配置),两个容器共用一个Environment

bootstrap 父容器和应用容器加载方式不一样,基于本地bootstrap.yml而不是application.yml配置文件,这样可以很好的隔离父容器配置和应用容器配置。

图片

从配置中心加载指定应用的配置,需要指定spring.application.name配置。

从配置中心加载指定 Profile 的配置,需要指定spring.profiles.active配置。

上面配置应该在bootstrap.yml中配置,而不是application.yml,为了优先加载父容器的配置。

例如:bootstrap.yml

spring:
  application:
    name: sample
  profiles:
    active: dev
  cloud:
    config:
      uri: ${SPRING_CONFIG_URI:http://localhost:8888}

可以在系统配置中使用spring.cloud.bootstrap.enabled=false配置来禁用 bootstrap 流程。

五、配置中心加载

SpringCloud 默认在 Bootstrap 流程中从 Spring Cloud Config 服务器上加载外部配置,也支持从其他配置中心(Consul、Nacos 等)中加载。

配置中心客户端通过实现PropertySourceLocator接口,来添加配置中心加载逻辑。

@Configuration
public class CustomPropertySourceLocator implements PropertySourceLocator {

    @Override
    public PropertySource<?> locate(Environment environment) {
        Properties properties = new Properties();
        // 加载配置中心的配置
        return new PropertiesPropertySource("configServerProperties", properties);
    }
}

然后在classpath下创建/META-INF/spring.factories文件,并配置下面内容。

# Bootstrap Configuration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
cn.codeartist.springcloud.commons.locator.CustomPropertySourceLocator

六、应用配置加载

SpringCloud 应用会构建父子容器的上下文,bootstrap 父容器与应用容器是继承的关系,所以父容器会优先加载。

bootstrap 父容器中存在PropertySourceLocator接口实现时,会最优先加载该接口导入的配置。

父容器上下文会基于boostrap.[properties | yml]配置文件创建。

应用容器上下文在父容器创建完后,加载application.[properties | yml]配置文件。

图片

七、配置读取优先级

划重点了,一般项目都会有很多的配置文件,但是如果需要修改配置文件,不知道的优先级就很麻烦,SpringCloud 应用和 Spring 一样会从多个地方读取配置,配置的默认优先级从高到低如下:

  • 配置中心配置
  • JVM 系统属性 (-D指定的命令行参数)
  • 环境变量属性(操作系统环境变量)
  • application.[properties | yml]
  • boostrap.[properties | yml]

如果多个地方存在相同的配置,取优先级高的配置。

图片

配置中心默认最高优先级,不能被本地配置覆盖,如果必须要覆盖,可以在配置中心添加下面配置。

spring:
  cloud:
    config:
      allowOverride: true
      overrideNone: true
      overrideSystemProperties: false

注意:上述配置在本地配置无效,必须在配置中心配置。

总结

以上知识点对你帮助吗,留下你的关注,还有更多的知识点分享给你,一起学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“深入”理解字节对齐

文章目录 前言思考查阅资料[Byte alignment and ordering](https://www.eventhelix.com/embedded/byte-alignment-and-ordering/)Byte Alignment RestrictionsWhy Restrict Byte Alignment?Compiler Byte PaddingUser Defined StructureActual Structure Definition Used By t…

使用SaleSmartly自动化流程的 5 个原因

想象一下&#xff0c;如果您可以采用智能数字解决方案来减轻团队和公司的手动和重复业务流程负担。它可以帮助您节省时间、提高公司的底线、消除冗余并增强数据管理。SaleSmartly&#xff08;ss客服&#xff09;就是这样。 通过利用自动化的力量&#xff0c;SaleSmartly&#x…

牛客网专项练习Pytnon分析库(一)

1.提取出a和b两个数组中的公共项,可以使用numpy库中的哪个函数&#xff08;A&#xff09;。 A.np.intersect1d(a,b) B.np.setdiff1d(a,b) C.np.where(a b) D.np.lexsort((a,b)) 解析&#xff1a; A选项&#xff0c;np.intersect1d用来获取数组a和数组b之间的公共项&…

MySQL遇到过死锁问题吗,你是如何解决的?

MySQL遇到过死锁问题吗&#xff0c;你是如何解决的&#xff1f; 问题解析 死锁&#xff0c;就是两个或者两个以上的线程在执行过程中&#xff0c;去争夺同一个共享资源导致互相等待的现象。 在没有外部干预的情况下&#xff0c;线程会一直处于阻塞状态&#xff0c;无法往下执行…

理解FPGA的基础知识——逻辑电路

FPGA (Field Programmable Gate Aray,现场可编程门阵列)是一种可通过重新编程来实现用户所需逻辑电路的半导体器件。为了便于大家理解FPGA的设计和结构&#xff0c;我们先来简要介绍一些逻辑电路的基础知识。 1.逻辑代数 逻辑代数中的变量称为逻辑变量&#xff0c;用大写字母表…

Arduino ESP32 ESP-Rainmaker点灯示例

Arduino ESP32 ESP-Rainmaker点灯示例 &#x1f4cc;基于ESP-IDF工程相关篇《ESP32 ESP-Rainmaker 本地点灯控制Demo测试》&#x1f388;原项目地址&#xff1a;https://github.com/espressif/esp-rainmaker&#x1f516;本次所测试的项目示例工程&#xff1a;\esp-rainmaker—…

backtrader的cs功能介绍

cs框架的优点和缺点 优点和ts一样,就是速度非常快缺点有好几个:必须使用根据过去一定天数计算因子值,持有一定天数之后再平衡的模式;必须使用连续的数据,如果是期货期权等需要合成连续数据。资金不足的时候不会拒单。cs框架使用方法 设计理念 计算因子由用户进行计算,因…

用科技创造未来!流辰信息技术助您实现高效办公

随着社会的迅猛发展&#xff0c;科技的力量无处不见。它正在悄悄地改变整个社会&#xff0c;让人类变得进步和文明&#xff0c;让生活变得便捷和高效。在办公自动化强劲发展的今天&#xff0c;流辰信息技术让通信业、电网、汽车、物流等领域的企业实现了高效办公&#xff0c;数…

工具及方法 - 安装播放器pot player

官网下载&#xff1a; potplayer.daum.net 可能国内访问有问题&#xff0c;还有一个网站&#xff1a; Global Potplayer 或者为了纯净安全些&#xff0c;找下国外可下载网站&#xff1a; PotPlayer 230407 / 230504 Beta Free Download - VideoHelp 下载后安装即可&#xff…

红蜻蜓利用档案数字化管理,实现业务管理降本增效

在数字化大背景下&#xff0c;红蜻蜓积极拥抱数字化档案&#xff0c;全面优化档案管理成本&#xff0c;保证组织档案安全可信&#xff0c;助力企业业务高质量发展。 关于红蜻蜓 红蜻蜓&#xff0c;创始于1995年&#xff0c;是一家多品牌、多品类的时尚鞋履品牌运营商&#xf…

欧科云链OKLink:2023年4月安全事件盘点

一、基本信息 2023年4月安全事件共造约6000万美金的损失&#xff0c;与上个月相比&#xff0c;损失金额有所降落&#xff0c;但安全事件数量依旧不减。其中&#xff0c;Yearn Finance因参数配置错误&#xff0c;导致了1000多万美金的损失。同时&#xff0c;有一些已经出现过的…

【剧前爆米花--爪哇岛寻宝】TCP/IP协议以及在网络传输过程中的封装与分用

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络初识的文章&#xff0c;在这篇文章中讲解了TCP/IP协议的主要内容和砸在网络传输过程中的封装和分用&#xff0c;希望对你有所帮助&#xff01; 目录 TCP/IP五层模型 应用层…

渲染和不渲染的区别是什么?

随着计算机技术日新月异不断发展&#xff0c;电脑合成技术图像技术也日益成熟。在三维制作中&#xff0c;经常会提到一个词“渲染”&#xff0c;很多没有接触三维制作的朋友可能不是太清楚它究竟是什么&#xff0c;图像制作后&#xff0c;渲染和不渲染的区别是什么&#xff0c;…

【Admin后台管理】Geodjango后台显示地图并加载空间字段

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、djangoadmin二、geodjangoadmin三、报错处理 前言 在前面的博客中&#xff0c;我们已经介绍了Geodjango的环境搭建和数据库操作&…

网易云音乐开发--前后端交互

前后端交互 首先启动服务器 1. 根目录下执行&#xff1a; npm start 2. 服务器地址&#xff1a; http://localhost:3000 3. 示例: http://localhost:3000/banner 测试接口能不能用 发起请求 看接口说明&#xff0c;在wx的load函数中发起请求 请求成功 封装请求功能函数 …

Django框架之ORM和模型属性

Django对很多数据库都有支持&#xff0c;为这些数据库提供了统一的调用API。可以根据不同的业务需求&#xff0c;选择配置不同的数据库。本篇文章主要介绍ORM和模型属性。 ORM ORM全称Object Relational Mapping&#xff0c;即对象关系映射&#xff0c;是在pymysq之上又进行了…

JAVAWeb11-服务器渲染技术 -JSP-01-JSP基础

1. 现状 1、JSP 使用情况 2、Thymeleaf 使用情况, 通常和 SpringBoot 结合(也会讲) 3、Vue 使用情况 2. 学 JSP 前&#xff0c;老师要说的几句话 目前主流的技术是 前后端分离 (比如: Spring Boot Vue/React), 我们会讲的.[看一下]JSP 技术使用在逐渐减少&#xff…

06 - 4 微内核架构

什么是微内核架构 定义 微内核 核心功能资源封装 插件 可插拔 系统核心 资源封装 硬件接口系统资源访问接口环境/上下文&#xff08;context&#xff09;访问接口系统事件接口 定义插件规范 使用场景规则条件 核心功能 支持系统运作的最小功能集 职责分离 通用流程由核心…

音视频八股文(10)-- mp4结构

介绍 mp4⽂件格式⼜被称为MPEG-4 Part 14&#xff0c;出⾃MPEG-4标准第14部分 。它是⼀种多媒体格式容器&#xff0c;⼴泛⽤于包装视频和⾳频数据流、海报、字幕和元数据等。&#xff08;顺便⼀提&#xff0c;⽬前流⾏的视频编码格式AVC/H264 定义在MPEG-4 Part 10&#xff09…

CTF权威指南 笔记 -第三章汇编基础-3.2-x86/x64汇编基础

这节介绍PC最常见的架构 x86和扩展 x64框架 CPU操作模式 对x86处理器而言 有三个最主要的保护模式 保护模式 实地址模式 系统管理模式还有一个保护模式的子模式 虚拟8086模式 保护模式 保护模式是处理原生状态 这个时候所有指令和特性都是可以使用的 分配给程序的独立内…