当前位置: 首页 > news >正文

大白话实战Sentinel

Sentinel是SpringCloudAlibaba提供的用来做服务保护的框架,而服务保护的常见手段就是限流和熔断降级。在大型分布式系统里面,由于微服务众多,所以服务之间的稳定性需要做特别关注,Sentinel的核心包就提供了从多个维度去保护服务稳定的策略,而且这些保护策略都可以连接上Sentinel的控制台,在可视化界面进行配置,我们把这些保护策略可以称为规则,配置的这些保护规则也可以存储到Zookeeper、Nacos等等具有配置中心功能的中间件中,而且Sentinel还配置了多种微服务架构,比如SpringCloud、Dubbo等,如下图所示:
在这里插入图片描述
我们可以看一下Sentinel的工作原理,加上分布式系统中有很多微服务,每个微服务中都有很多资源需要我们进行保护,什么是资源呢,其实万物皆可为资源,它可以是一个HTTP请求,也可以是一个远程调用,或者是一段业务逻辑代码,也可以是访问数据库的一些方法,每个应用都有非常多的资源,我们只需要引入Sentinel客户端,这些客户端就可以连上Sentinel的控制台,在Sentinel控制台里面可以对每一种资源的规则进行定义,比如限流规则,熔断降级规则,黑白名单等等,当然这些规则一般由运维人员进行定义,定义的这些规则可以存储到Nacos、Zookeeper等这些配置中心,当然存在内存也没问题,只不过重启就失效了,而且如果这些规则发生了变更,Sentinel控制台还可以实时把这些规则推送给每个微服务,这样我们每次访问资源的时候,Sentinel客户端就会来检测每种资源的规则,然后判断是不是违背这些规则,如果没有违背则放行,如果违背就拒绝服务,通过这种手段来保护系统的稳定性,架构原理图如下:
在这里插入图片描述
在这个图里面和我们编码相关的就两个,一个是资源,一个是规则。

而使用Sentinel想要定义一个资源也非常简单:
在这里插入图片描述
定义好了资源,就需要在Sentinel的控制台来定义保护这些资源的规则,Sentinel提供了上面的规则,第一种流量控制,就是我们常说的限流,比如请求量一大,如果我们把所有请求都接收过来在后台进行处理,有可能导致这个微服务所在的机器资源耗尽,所以可以对请求进行限流,比如每秒只允许通过100个请求,超出的请求全部拒绝掉,这样的话,即使上万并发,后台也只处理100个,不至于后台崩了。第二种规则叫熔断降级,这就是防服务雪崩的,而且在OpenFeign的时候也演示了一旦远程调用失败去走兜底数据。第三种规则叫系统保护,可以根据当前机器是CPU负载、内存使用率,看到CPU太忙了,可以限制请求流量进入。第四种规则叫来源访问控制,只允许哪些上游来访问下游资源。第五种规则叫定义热点参数,这个后面细说。

总之一句话,想要使用Sentinel,你要想清楚要保护哪些资源,这些资源怎么找到,是通过自动适配发现的还是通过编程定义的还是声明式的。有了这些资源后,再定义各种保护规则,当这两个定义好后,Sentinel就可以进行工作了。

它的工作原理是,用户去来访问一个资源,比如访问一个HTTP请求,假设就是创建订单,而这些资源我们给它定义了一个规则,每次访问的时候Sentinel就会检查这些规则,假设我们定义一个流量控制规则,每秒只能通过一个请求,对于这个规则的检查就会出现两种情况,是否违法了这些规则,如果没有违法这次请求就放行,如果违反了这些规则,Sentinel就会抛出异常,对于这个异常我们就要进行针对性的处理,这就要看我们有没有编写兜底处理的方法,如果没有就抛出错误,如果编写了兜底处理,比如OpenFeign的fallback兜底回调,就会返回兜底数据。详细流程如下图:
在这里插入图片描述

通过这个原理图我们知道,在Sentinel的使用中我们关注三点,第一点怎么定义一个资源,第二点定义资源的保护规则,第三点一旦违反了规则,怎么处理异常。

整合-基础场景

先做第一步,启动一个Sentinel Dashboard控制台,方便我们在控制台定义控制资源的一些规则,在官网下载sentinel-dashboard-1.8.8.jar ,然后启动 sentinel-dashboard:
在这里插入图片描述
启动后访问:
在这里插入图片描述

默认账号和密码都是sentinel。
在这里插入图片描述
因为还没有任何微服务接入sentinel,所以在控制台里面没有显示任何数据,接入后就会有所有的微服务列表。

第二步,给微服务整个sentinel场景,并配置链接上sentinel控制台,那这个应用的所有资源,通过注解或代码埋点的这些资源,都可以在控制台定义它们的规则。

我们之前在学习OpenFeign的时候,由于已经整合了sentinel,只不过当时sentinel依赖只放到了order里面,由于每个微服务都需要被保护起来,所以我们直接在services里面统一引入sentinel依赖。引入好依赖,这样每个微服务都需要配置连接上sentinel控制台,我们在order配置文件中配置连接sentinel的地址:
由于sentinel默认用的是懒加载机制,整合之后,只有我们访问了请求,控制台才能显示出应用的信息,所以为了方便起见,可以让它提前加载,在sentinel配置中把eager设置为true,就可以项目一启动,自动连上sentinel控制台:

spring:cloud:openfeign:client:config:default:logger-level: fullconnect-timeout: 1000read-timeout: 2000service-product:logger-level: fullconnect-timeout: 3000read-timeout: 5000sentinel:transport:dashboard: localhost:8080eager: true
#            response-interceptor:
#              com.example.order.interceptor.XTokenRequestInterceptor
#            retryer: feign.retryer.Defaultfeign:sentinel:enabled: true

每个服务都配置好即可。

然后我们启动订单和商品两个微服务。首先看它们能不能连上sentinel控制台,将自己的应用信息正确显示,启动后刷新控制台:
在这里插入图片描述
这样在这个控制台里面就可以配置很多的规则,但是这些规则都是对资源配置的,那什么是资源呢?我们一起来看看它的默认行为,它把系统所有web接口都认为的资源,包括openfeign的远程调用也认为的一个资源,或者我们用注解和编程的方式都可以定义资源,那么接下来就以创建订单为例,由于创建订单是一个web请求,所以谁来发送web请求,会走创建订单服务,创建订单服务里面又会远程调用查询商品,假设认为创建订单这个方法是一个资源,我将来想保护它,对它进行一些流控等一些设置,那么可以用最简单的方式,使用一个注解叫@SentinelResource(value = “createOrder”)
在这里插入图片描述
重新启动订单服务,然后发送一个创建订单的请求:
在这里插入图片描述

在sentinel控制台有个簇点链路就会看到这个调用过程:
在这里插入图片描述
首先我们发送了一个create请求,它认为create是一个资源,create里面又调用了createOrder,它认为这个也是一个资源,这个资源是我们通过注解定义的,而create请求是sentinel自动勘测的一个web接口,而在createOrder里面又调用了商品的接口,也是可以被控制的资源。只要有了这些资源,我们可以对任意资源进行控制各种规则,我们先来测试流控:
在这里插入图片描述
点击新增后就可以在流控规则中看到了:

在这里插入图片描述

我们先测试一下,如果刷慢一点,每秒访问一个,发现都正常:

在这里插入图片描述

如果我刷新快一点,就返回一个默认错误:
在这里插入图片描述

异常处理-web接口

从上面可以看到sentinel每秒只会放行1个请求,放行的请求才会执行目标方法的创建订单,而被阻塞的请求,目标方法是不会被执行的,这样就不会占用系统资源,即使高并发的请求,只有少量的目标方法执行,那就不会导致服务雪崩的问题,但是现在还有一个问题,如果一旦请求被限制后,返回的是默认sentinel错误提示页,而我们一般大型的系统都是前后分离的,后台微服务要给前端返回json数据,这就牵扯到sentinel的异常处理机制,在sentinel里面异常处理是一个比较复杂的流程,
在这里插入图片描述

如果我们想要改掉默认的web页面显示的异常信息,就要自定义一个BlockExceptionHandler,我们先来解决web接口的异常处理方式。我们自己写一个BlockExceptionHandler,只要把它放到容器中就可以生效:
在这里插入图片描述

我们先在model模块中自定义一个通用的返回对象R:

package com.example.common;import lombok.Data;@Data
public class R {private Integer code;private String msg;private Object data;public static R ok() {R r = new R();r.setCode(200);return r;}public static R ok(String msg, Object data) {R r = new R();r.setCode(200);r.setMsg(msg);r.setData(data);return r;}public static R error() {R r = new R();r.setCode(500);return r;}public static R error(Integer code, String msg) {R r = new R();r.setCode(

相关文章:

大白话实战Sentinel

Sentinel是SpringCloudAlibaba提供的用来做服务保护的框架,而服务保护的常见手段就是限流和熔断降级。在大型分布式系统里面,由于微服务众多,所以服务之间的稳定性需要做特别关注,Sentinel的核心包就提供了从多个维度去保护服务稳定的策略,而且这些保护策略都可以连接上Se…...

【AI面板识别】

题目描述 AI识别到面板上有N(1 ≤ N ≤ 100)个指示灯,灯大小一样,任意两个之间无重叠。 由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1&#x…...

Docker安装Kafka(不依赖ZooKeeper)

创建docker-compose.yaml version: "3.9" #版本号 services:kafka:image: apache/kafka:3.9.0container_name: kafkahostname: kafkaports:- 9092:9092 # 容器内部之间使用的监听端口- 9094:9094 # 容器外部访问监听端口environment:KAFKA_NODE_ID: 1KAFKA_PROCES…...

大道至简 少字全意 易经的方式看 jvm基础 、 内存模型 、 gc、 内存异常、内存调优实战案例 、类加载机制、双亲委派模型 适用于 懂而久未用回忆 ,不懂而需明正理而用

目录 介绍 内存模型 一、线程私有区域 二、线程共享区域 1.堆Heap 2. 方法区Method Area 3.运行时常量池 Runtime constant Pool 三、直接内存(Direct Memory) 四、内存异常与调优 五、总结对比 类加载机制 一、类加载的三大阶段 二、双亲委派模型 三、类加载的特…...

【Java学习】继承

一、继承 子类继承父类,子类这个类变量的引用在原有的指向子类自己类变量空间的原有访问权限上,增加上了父类类变量空间的访问权限,此时子类类变量指向的空间变为了原来子类类变量空间加上父类类变量空间,此时子类类变量空间就变成…...

Ubuntu24安装MongoDB(解压版)

目录 0.需求说明1.环境检查2.下载软件2.1.下载MongoDB服务端2.2.下载MongoDB连接工具(可略过)2.3.检查上传或下载的安装包 3.安装MongoDB3.1.编辑系统服务3.2.启动服务3.3.客户端连接验证3.3.1.创建管理员用户 4.远程访问4.1.开启远程访问4.2.开放防火墙 0.需求说明 问&#x…...

计算机毕业设计Python考研院校推荐系统 考研分数线预测 考研推荐系统 考研可视化(代码+LW文档+PPT+讲解视频)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Python 爬虫框架对比与推荐

Python 爬虫框架对比与推荐 Python 爬虫框架对比与推荐1. Scrapy1.1 框架介绍1.2 优点1.3 缺点1.4 适用场景 2. PySpider2.1 框架介绍2.2 优点2.3 缺点2.4 适用场景 3. Selenium3.1 框架介绍3.2 优点3.3 缺点3.4 适用场景 4. BeautifulSoup Requests(自定义方案&am…...

本地DeepSeek模型GGUF文件转换为PyTorch格式

接前文,我们在本地Windows系统上,基于GGUF文件部署了DeepSeek模型(DeepSeek-R1-Distill-Qwen-1.5B.gguf版本),但是GGUF是已经量化的版本,我们除了对其进行微调之外,无法对其训练,那么还有没有其他办法对本地的GGUF部署的DeepSeek模型进行训练呢?今天我们就反其道而行之…...

自动化测试框架搭建-单次接口执行-三部曲

目的 判断接口返回值和提前设置的预期是否一致,从而判断本次测试是否通过 代码步骤设计 第一步:前端调用后端已经写好的POST接口,并传递参数 第二步:后端接收到参数,组装并请求指定接口,保存返回 第三…...

SAP F1搜索帮助 添加自定义功能按钮

最近deepseek 比较火,好多伙伴把deep seek 调用集成到SAP 系统,集成需要方便的去查询问题,方便一点就是添加在F1搜索帮助的地方,看到有朋友问看自定义按钮怎么添加在F1的工具栏,跟踪了下代码,尝试了下&…...

Webpack,Vite打包的理解

Webpack 和 Vite 都是现代前端开发中常用的构建工具,用于打包和优化项目代码。尽管它们的目标相似,但在设计理念、工作方式和适用场景上存在显著差异。 Webpack Webpack 是一个模块打包工具,主要用于将多个模块(如 JavaScript、…...

ollama部署大模型,本地调用

Ollama是一个强大的大型语言模型平台,它允许用户轻松地下载、安装和运行各种大型语言模型。在本文中,我将指导你如何在你的本地机器上部署Ollama,并展示如何使用Python进行简单的API调用以访问这些模型。 最近很多人在学习大模型的时候&…...

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑩】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase10 作者:车端域控测试工程师 更新日期:2025年02月18日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-010测试用例 用例ID测试场景验证要点参考条款预期结果TC…...

opencv实时二维码识别的一种实现与思路分享

在嵌入式平台上比如 rk3568 这种弱鸡的平台,要做到实时视频处理就非常鸡肋,不像英伟达那种 deepstrem 什么的。 开始的时候,我们使用python 下的 pyzbar + opencv opencv 读取摄像头的数据然后每帧送到 pyzbar 二维码识别函数里面进行处理,然后打印出识别的数字。结果,非常…...

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑫】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase12 作者:车端域控测试工程师 更新日期:2025年02月18日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-012测试用例 用例ID测试场景验证要点参考条款预期结果TC…...

Jenkins同一个项目不同分支指定不同JAVA环境

背景 一些系统应用,会为了适配不同的平台,导致不同的分支下用的是不同的gradle,导致需要不同的JAVA环境来编译,比如a分支需要使用JAVA11, b分支使用JAVA17。 但是jenkins上,一般都是Global Tool Configuration 全局所有环境公用一个JAVA_HOME。 尝试过用 Build 的Execut…...

小爱音箱连接电脑外放之后,浏览器网页视频暂停播放后,音箱整体没声音问题解决

背景 22年买的小爱音箱增强版play,小爱音箱连接电脑外放之后,浏览器网页视频暂停播放后,音箱整体没声音(一边打着游戏,一边听歌,一边放视频,视频一暂停,什么声音都没了,…...

AIGC(生成式AI)试用 21 -- Python调用deepseek API

1. 安装openai pip3 install openai########################## Collecting openaiUsing cached openai-1.61.1-py3-none-any.whl.metadata (27 kB) Collecting anyio<5,>3.5.0 (from openai)Using cached anyio-4.8.0-py3-none-any.whl.metadata (4.6 kB) Collecting d…...

使用linux脚本部署discuz博客(详细注释版)

使用脚本部署一个discuzz项目 1.显示当前环境状态 防火墙状态 selinux状态 httpd状态 由上可知&#xff0c;虚拟机已处于最初始状态 2.脚本编写 #!/bin/bash #这是一个通过脚本来部署discuzz博客 firewalld关闭 systemctl stop firewalld if [ $? -eq 0 ];then echo "…...

Kafka的生产者和消费者模型

Kafka的生产者和消费者模型是一种消息传递模式&#xff0c;以下是该模型的详细描述&#xff1a; 一、生产者&#xff08;Producer&#xff09; 定义&#xff1a;生产者是消息的生产者&#xff0c;它将消息发布到Kafka的主题&#xff08;Topic&#xff09;中。 功能&#xff1…...

调用openssl实现加解密算法

由于工作中涉及到加解密&#xff0c;包括Hash&#xff08;SHA256&#xff09;算法、HMAC_SHA256 算法、ECDH算法、ECC签名算法、AES/CBC 128算法一共涉及5类算法&#xff0c;笔者通过查询发现openssl库以上算法都支持&#xff0c;索性借助openssl库实现上述5类算法。笔者用的op…...

【Python项目】信息安全领域中语义搜索引擎系统

【Python项目】信息安全领域中语义搜索引擎系统 技术简介&#xff1a;采用Python技术、MYSQL数据库等实现。 系统简介&#xff1a;系统主要是围绕着语义搜索展开的&#xff0c;要将输入的文字在爬取数据时能够通过深层次的内涵理解&#xff0c;来更好的查找到与之相关的精准信息…...

快速排序_912. 排序数组(10中排序算法)

快速排序_912. 排序数组&#xff08;10中排序算法&#xff09; 1 快速排序&#xff08;重点&#xff09;报错代码超时代码修改官方题解快速排序 1&#xff1a;基本快速排序快速排序 2&#xff1a;双指针&#xff08;指针对撞&#xff09;快速排序快速排序 3&#xff1a;三指针快…...

BS5852英国家具防火安全条款主要包括哪几个方面呢?

什么是BS5852检测&#xff1f; BS5852是英国针对家用家具的强制性安全要求&#xff0c;主要测试家具在受到燃烧香烟和火柴等火源时的可燃性。这个标准通常分为四个部分进行测试&#xff0c;但实际应用中主要测试第一部分和第二部分&#xff0c;包括烟头测试和利用乙炔火焰模拟…...

高考或者单招考试需要考物理这科目

问题&#xff1a;帮忙搜索一下以上学校哪些高考或者单招考试需要考物理这科目的 回答&#xff1a; 根据目前获取的资料&#xff0c;明确提及高考或单招考试需考物理的学校为湖南工业职业技术学院&#xff0c;在部分专业单招时要求选考物理&#xff1b;其他学校暂未发现明确提…...

基于vue3实现的课堂点名程序

设计思路 采用vue3实现的课堂点名程序&#xff0c;模拟课堂座位布局&#xff0c;点击开始点名按钮后&#xff0c;一朵鲜花在座位间传递&#xff0c;直到点击结束点名按钮&#xff0c;鲜花停留的座位被点名。 课堂点名 座位组件 seat.vue <script setup>//组合式APIimpo…...

压力传感器

压力传感器是一种用于测量气体或液体压力的设备&#xff0c;广泛应用于工业控制、汽车电子、医疗设备、航空航天等领域。以下是关于压力传感器的详细介绍&#xff1a; 一、压力传感器的分类 1. 按测量原理分类 - 压阻式压力传感器&#xff1a; - 原理&#xff1a;利用压…...

Django REST Framework (DRF) 中用于构建 API 视图类解析

Django REST Framework (DRF) 提供了丰富的视图类&#xff0c;用于构建 API 视图。这些视图类可以分为以下几类&#xff1a; 1. 基础视图类 这些是 DRF 中最基础的视图类&#xff0c;通常用于实现自定义逻辑。 常用类 APIView&#xff1a; 最基本的视图类&#xff0c;所有其…...

DeepSeek介绍[Cache-Through、Cache-Around、Cache-Behind、Cache-Asid]

Cache-Through、Cache-Around、Cache-Behind和Cache-Aside是几种常见的缓存策略&#xff0c;每种策略有其独特的工作机制和应用场景。以下是对这些缓存模式的详细介绍&#xff1a; 1. Cache-Through 工作原理&#xff1a; 读操作&#xff1a;应用程序首先向缓存层请求数据。…...

React 前端框架介绍

什么是 React&#xff1f; React 是一个由 Facebook 开发并维护的开源 JavaScript 库&#xff0c;用于构建用户界面。它主要用于创建交互式用户界Face&#xff08;UI&#xff09;&#xff0c;尤其是当数据变化时需要更新部分视图时非常有效。React 的核心思想是组件化和声明性…...

自制简单的图片查看器(python)

图片格式&#xff1a;支持常见的图片格式&#xff08;JPG、PNG、BMP、GIF&#xff09;。 import os import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTkclass ImageViewer:def __init__(self, root):self.root rootself.root.…...

基于Electron+Vue3创建桌面应用

Electron 是一个开源框架,基于 Chromium 和 Node.js,用于开发跨平台桌面应用程序。它允许开发者使用 HTML、CSS 和 JavaScript 等 Web 技术构建原生桌面应用,支持 Windows、macOS 和 Linux。Electron 以其开发便捷性、强大的功能和丰富的生态系统而广泛应用于工具类应用、媒…...

Redis实战-扩展Redis

扩展Redis 1、扩展读性能2、扩展写性能和内存容量3、扩展复杂的查询3.1 扩展联合查询3.2 扩展分片排序 如有侵权&#xff0c;请联系&#xff5e; 如有错误&#xff0c;也欢迎批评指正&#xff5e; 本篇文章大部分是来自学习《Redis实战》的笔记 1、扩展读性能 单台Redis服务器…...

Vue 前端开发中的路由知识:从入门到精通

文章目录 引言1. Vue Router 简介1.1 安装 Vue Router1.2 配置 Vue Router1.3 在 Vue 实例中使用 Vue Router 2. 路由的基本用法2.1 路由映射2.2 路由视图2.3 路由链接 3. 动态路由3.1 动态路径参数3.2 访问动态参数3.3 响应路由参数的变化 4. 嵌套路由4.1 定义嵌套路由4.2 渲染…...

为AI聊天工具添加一个知识系统 之109 详细设计之50 三性三量三境

本文要点 纵观整个讨论过程 最初我提“相得益彰的三性&#xff08;三性&#xff09; 相提并论的三者&#xff08;三量&#xff09; 相映成趣的三化&#xff08;三境&#xff09;” “ 确定 今天的讨论题-- “我”的知识树&#xff1a;相得益彰的三性&#xff08;即 三性&…...

51-ArrayList

51-ArrayList Collection 类型介绍 仓颉中常用的几种基础 Collection 类型&#xff0c;包含 Array、ArrayList、HashSet、HashMap。 可以在不同的场景中选择适合对应业务的类型&#xff1a; Array&#xff1a;如果不需要增加和删除元素&#xff0c;但需要修改元素&#xff…...

工业制造能耗管理新突破,漫途MTIC-ECM平台助力企业绿色转型!

在工业制造领域&#xff0c;能源消耗一直是企业运营成本的重要组成部分。随着“双碳”目标的推进&#xff0c;如何实现高效能耗管理&#xff0c;成为制造企业亟待解决的问题。漫途MTIC-ECM能源能耗在线监测平台&#xff0c;结合其自研的硬件产品&#xff0c;为工业制造企业提供…...

sql注入之python脚本进行时间盲注和布尔盲注

一、什么是时间盲注和布尔盲注&#xff1f; 答&#xff1a;时间盲注是攻击者通过构造恶意sql语句利用sleep()等延迟函数来观察数据库响应时间差异来进行推断信息和条件判断。如果条件为真&#xff0c;数据库会执行延时操作&#xff0c;如果为假则立即返回。响应时间较短。 SELE…...

map的使用(c++)

在了解map之前&#xff0c;我们先看看两个场景&#xff0c;通过这两个场景的对比&#xff0c;让我们知道为什么要存在存储双关键字的容器 场景一&#xff1a;判断一堆字符串中&#xff0c;某一个字符串是否出现过 在没学set容器之前&#xff0c;我们只能想到把这一堆字符串存到…...

Android13-包安装器PackageInstaller-之apk安装流程

目的 我们最终是为了搞明白安装的整个流程通过安卓系统自带的包安装器来了解PMS 安装流程实现需求定制&#xff1a;静默安装-安装界面定制-安装拦截验证。【核心目的】 安装流程和PMS了解不用多说了; 安装定制相关&#xff1a; 如 手机上安装时候弹出锁屏界面需要输入密码;安…...

前端函数在开发环境与生产环境中处理空字符串的差异及解决方案

在前端开发过程中&#xff0c;我们经常会遇到一些函数在开发环境中运行正常&#xff0c;但在生产环境中却出现报错的情况。本文将通过具体的代码示例和分析&#xff0c;探讨一个函数在开发环境和生产环境中处理空字符串的差异&#xff0c;并提供解决方案。 1. 问题描述 我们有…...

数智读书笔记系列014 MICK《SQL进阶教程》第一版和第二版对比和总结

引言 在当今数字化时代,数据已成为企业和组织的核心资产之一。而 SQL(Structured Query Language)作为管理和操作关系型数据库的标准语言,其重要性不言而喻。无论是数据查询、插入、更新还是删除,SQL 都能高效地完成任务,广泛应用于数据分析、数据挖掘、数据仓库、Web 开…...

智能猫眼实现流程图

物理端开发流程图 客户端端开发流程图 用户功能开发流程图 管理员开发流程图...

docker安装kafka,并通过springboot快速集成kafka

目录 一、docker安装和配置Kafka 1.拉取 Zookeeper 的 Docker 镜像 2.运行 Zookeeper 容器 3.拉取 Kafka 的 Docker 镜像 4.运行 Kafka 容器 5.下载 Kafdrop 6.运行 Kafdrop 7.如果docker pull wurstmeister/zookeeper或docker pull wurstmeister/kafka下载很慢&#x…...

Spring Boot 中自动装配机制的原理

Spring Boot 的自动装配机制是其核心特性之一&#xff0c;它简化了 Spring 应用的配置&#xff0c;让开发者能够快速构建应用。以下是对其原理的详细总结&#xff1a; 1. 核心概念 自动装配 (Auto-configuration): Spring Boot 根据应用依赖和配置&#xff0c;自动配置 Spring…...

python继承中super() 不是简单的“调用父类”,而是调用 MRO 里的下一个类

Python 里的一个类可以同时继承多个父类。这让我们的模型设计变得更灵 活&#xff0c;但同时也带来一个新问题&#xff1a;“在复杂的继承关系下&#xff0c;如何确认子类的 某个方法会用到哪个父类&#xff1f;” 这里有点需要理解&#xff1a; MRO&#xff08;方法解析顺序…...

【智慧校园】分体空调节能监管:打造高效节能的学习环境

随着科技的飞速发展和生活品质的不断提升&#xff0c;人们对于家居和办公环境的舒适度与智能化要求也越来越高。分体空调集中控制系统作为一种先进的空调管理方式&#xff0c;正逐渐成为现代家庭和办公场所的标配&#xff0c;为用户带来更加便捷、高效和节能的空调使用体验。随…...

【达梦数据库】dblink连接[SqlServer/Mysql]报错处理

目录 背景问题1&#xff1a;无法测试以ODBC数据源方式访问的外部链接!问题分析&原因解决方法 问题2&#xff1a;DBLINK连接丢失问题分析&原因解决方法 问题3&#xff1a;DBIINK远程服务器获取对象[xxx]失败,错误洋情[[FreeTDS][SQL Server]Could not find stored proce…...

STM32 ADC介绍(硬件原理篇)

目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器&#xff08;维持-阻塞D触发器&#xff…...