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

SpringCloud(二)--SpringCloud服务注册与发现

一. 引言

​ 前文简单介绍了SpringCloud的基本简介与特征,接下来介绍每个组成部分的功能以及经常使用的中间件。本文仅为学习所用,联系侵删。

二. SpringCloud概述

2.1 定义

​ Spring Cloud是一系列框架的有序集合,它巧妙地利用了Spring Boot的开发便利性来简化分布式系统基础设施的开发。在微服务架构中,许多复杂且繁琐的分布式系统问题,如服务发现注册、配置中心、消息总线、负载均衡、熔断机制以及数据监控等,通过Spring Cloud都可以以Spring Boot的开发风格进行快速实现,并做到一键启动和部署。这使得开发者能够更专注于业务逻辑的实现,而无需在底层技术上花费过多精力。

image

image.gif

三. SpringCloud核心组件与原理

3.1 服务注册与发现

3.1.1概念

​ 在微服务架构中,服务注册与发现是确保服务间正常通信的关键环节。服务提供者启动时,会将自己的网络地址、端口号等信息注册到注册中心,如Eureka、Consul或Zookeeper等。这些注册中心负责存储和维护服务的注册信息,并提供服务发现的功能。服务消费者通过注册中心查询所需服务的信息,包括服务的地址和端口等,从而实现服务的动态发现。

​ 服务注册与发现机制的实现,使得微服务架构中的服务能够动态地加入和退出系统,无需手动配置服务间的依赖关系。这大大提高了系统的可扩展性和可维护性。

3.1.2 常用中间件

​ 服务注册与发现通常通过Eureka,Zookeeper,Consul,Nacos等来实现。服务提供者将自己的信息注册到对应的服务端上,服务消费者从对应的服务端获取服务提供者的信息。

3.1.2.1 Eureka

​ Eureka是由Netflix开发并开源的服务发现框架,它主要用于定位运行在AWS域中的中间层服务,实现负载均衡和中间层服务故障转移。Spring Cloud将其集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka的主要功能和特点包括:
  1. 服务注册与发现:服务提供者在启动时向Eureka Server注册自己的信息,Eureka Server保存这些信息。服务消费者可以通过Eureka Server查询服务提供者的信息,实现动态服务发现。
  2. 客户端负载均衡:Eureka集成了Ribbon实现客户端负载均衡,减少服务间的耦合。
  3. 故障转移:Eureka可以发现服务的可用性,并在服务不可用时进行故障转移,保证系统的高可用性。
  4. 可扩展性:支持多种服务注册和发现策略,支持集群部署。
  5. 健康检查:Eureka有一个检测心跳的功能,服务提供者每30秒向Eureka Server发送心跳请求,报告健康状态。如果超时则会剔除掉这个服务的信息。
  6. 自我保护模式:Eureka Server提供了自我保护机制,当Eureka Server在短时间内丢失过多心跳时,会进入自我保护模式,不再剔除任何服务实例,以避免因网络问题导致的服务不可用。
  7. 心跳机制:服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除,这就实现了服务的自动注册、发现、状态监控。
  8. 集群部署:Eureka Server可以构建集群,不同Eureka Server之间会进行服务信息同步,用来保证服务信息的一致性。

​ Eureka是微服务架构中服务注册与发现的重要组件,它通过简化服务间的通信,提高了系统的可扩展性和可维护性。尽管Eureka 2.0已经停止维护,但它仍然被许多公司的微服务系统所使用。

服务提供者注册代码示例

@SpringBootApplication  
@EnableEurekaClient  
public class ServiceProviderApplication {  public static void main(String[] args) {  SpringApplication.run(ServiceProviderApplication.class, args);  }  
}  // application.yml配置Eureka Server地址  
eureka:  client:  serviceUrl:  defaultZone: http://localhost:8761/eureka/

服务消费者发现代码示例

@RestController  
public class ServiceConsumerController {  @Autowired  private DiscoveryClient discoveryClient;  @GetMapping("/services")  public List<String> getServices() {  return discoveryClient.getServices();  }  
}  // application.yml配置Eureka Server地址  
eureka:  client:  serviceUrl:  defaultZone: http://localhost:8761/eureka/
3.1.2.2 Nacos
Nacos的功能与特点

​ Nacos是一个开源的动态服务发现、配置管理和服务管理平台,主要用于构建云原生应用。以下是Nacos的一些核心功能和特点:

  1. 服务发现与管理
    • Nacos支持基于DNS或RPC的服务发现,允许跨语言和跨平台的服务注册,并且客户端能够自动发现新注册的服务。
    • 提供对服务实例的健康状况监控,支持多种协议(如HTTP, TCP)的心跳检测,确保只有健康的实例参与服务调用。
    • 允许为每个服务实例附加额外的信息,如权重、版本等。
  2. 动态配置服务
    • 提供集中化的配置管理,支持实时更新并推送到所有订阅的客户端。
    • 支持多环境配置,可以针对不同的环境(开发、测试、生产)设置不同的配置值。
    • 配置热更新,即配置发生变化时,不需要重启服务即可生效,实现无缝的配置更新。
  3. DNS服务
    • 支持将服务名称解析为实际的IP地址,适用于微服务架构下的服务间通信。
    • 提供灵活的路由策略,可以根据需要设置负载均衡策略和其他路由规则。
  4. API和SDK支持
    • 提供Java、Python、Go等多种语言的客户端库,方便不同技术栈的应用集成Nacos。
    • 通过RESTful风格的API,用户可以直接操作Nacos中的数据和服务。
  5. 可视化控制台
    • 提供了一个Web控制台,便于管理员查看集群状态、管理服务实例、修改配置等。
    • 支持基于角色的访问控制(RBAC),可以精细控制用户的访问权限。
  6. 高可用性
    • 支持在多个节点上部署以形成集群,保证系统的高可用性和容错能力。
    • 使用数据库或磁盘文件存储关键数据,即使服务器宕机也能恢复服务状态。
  7. 其他特性
    • 与Spring Cloud生态系统良好集成,同时也支持其他主流的微服务框架。
    • 支持SSL/TLS加密传输,保护敏感信息的安全。

​ Nacos的这些功能使其成为构建微服务架构中不可或缺的一部分,特别是在大规模分布式系统中,它可以极大地简化服务治理和配置管理工作。

一句话概括就是Nacos = SpringCloud注册中心 + SpringCloud配置中心

Nacos配置示例

服务提供者配置(application.yml):

server:port: 8070
spring:application:name: nacos-providercloud:nacos:discovery:server-addr: 127.0.0.1:8848 # Nacos服务地址

服务消费者配置(application.yml):

server:port: 8071
spring:application:name: nacos-consumercloud:nacos:discovery:server-addr: 127.0.0.1:8848 # Nacos服务地址

启动类注解:

@SpringBootApplication
@EnableDiscoveryClient //开启服务注册发现功能
public class NacosProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosProviderApplication.class, args);}
}

详情参考:https://blog.csdn.net/wuesr/article/details/119032757

3.1.2.3 Zookeeper
Zookeeper功能与特点

​ Zookeeper是一个开源的分布式协调服务,由Apache基金会维护。它最初是作为Hadoop和Hbase的一个组件开发的,用于管理集群中的配置信息、命名服务、分布式同步和群组服务等。以下是Zookeeper的一些关键特点:

  1. 数据模型:Zookeeper提供了一个树状的层次化命名空间,称为ZNode,类似于文件系统。每个ZNode都可以存储数据,但有1MB的数据大小限制。
  2. 通知机制:客户端可以对特定的ZNode设置Watcher,当ZNode发生变化时,客户端会收到通知,从而可以做出相应的业务调整。
  3. 一致性:Zookeeper保证了全局数据的一致性,即所有服务器保存的数据副本都是相同的。
  4. 顺序性:Zookeeper中的更新请求是顺序进行的,来自同一个客户端的更新请求会按照发送顺序依次执行。
  5. 原子性:数据更新是原子性的,要么成功,要么失败。
  6. 实时性:在一定时间范围内,客户端能够读取到最新的数据。

​ Zookeeper广泛应用于分布式系统中,用于实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。

Zookeeper配置示例

Maven依赖:

<!-- zookeeper支持 -->
<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.6.4</version>
</dependency>
<!-- curator-recipes -->
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.5.0</version>
</dependency>
<!-- curator-framework -->
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>5.5.0</version>
</dependency>

连接Zookeeper客户端:

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 5);
CuratorFramework client = CuratorFrameworkFactory.newClient("ip:port",1000,60*1000,retryPolicy);
client.start();

详情参考:(https://blog.csdn.net/weixin_64105389/article/details/134180897)

3.1.2.4 Consul

Consul是由HashiCorp开发的开源工具,用于实现分布式系统的服务发现和配置。Consul的特点包括:

  1. 服务发现:Consul通过DNS或HTTP接口简化了服务的注册和发现过程,允许外部服务同样注册。
  2. 健康检查:Consul集成了健康检查功能,可以快速告警集群中的操作问题,并防止服务转发到故障的服务上。
  3. 键/值存储:Consul提供了一个动态配置存储系统,通过简单的HTTP接口可以在任何地方操作。
  4. 多数据中心支持:Consul无需复杂配置即可支持任意数量的数据中心。
  5. 安全性:Consul提供了ACL(访问控制列表)和TLS加密,以确保服务间通信的安全。

​ Consul的架构由服务器(SERVER)和客户端(CLIENT)节点组成,所有服务都可以注册到这些节点上,实现服务注册信息的共享。Consul的设计目标是对DevOps社区和应用程序开发人员友好,适合现代化、弹性基础架构的需求。

Consul配置示例
Maven依赖

首先,你需要在你的pom.xml文件中添加Consul客户端的依赖。这里使用的是consul-apiconsul-session客户端库。

xml

<dependencies><!-- Consul API --><dependency><groupId>com.orbitz.consul</groupId><artifactId>consul-client</artifactId><version>1.4.2</version></dependency><!-- Consul Session --><dependency><groupId>com.orbitz.consul</groupId><artifactId>consul-session</artifactId><version>1.4.2</version></dependency>
</dependencies>
服务注册
import com.orbitz.consul.Consul;
import com.orbitz.consul.model.agent.ImmutableRegistration;
import com.orbitz.consul.model.agent.Registration;public class ConsulServiceRegistration {public static void main(String[] args) {// 创建Consul实例,连接到本地Consul代理Consul consul = Consul.builder().build();// 构建服务注册信息Registration registration = ImmutableRegistration.	builder().id("service-id") // 服务ID.name("my-service") // 服务名称.address("127.0.0.1") // 服务地址.port(8080) // 服务端口.check(Registration.RegCheck.http("http://127.0.0.1:8080/health", "10s")) // 健康检查.build();// 注册服务consul.agentClient().register(registration);System.out.println("Service registered with Consul");}
}
服务注销
import com.orbitz.consul.Consul;
import com.orbitz.consul.model.agent.Deregistration;public class ConsulServiceDeregistration {public static void main(String[] args) {// 创建Consul实例,连接到本地Consul代理Consul consul = Consul.builder().build();// 构建服务注销信息Deregistration deregistration = Deregistration.builder().id("service-id") // 服务ID.build();// 注销服务consul.agentClient().deregister(deregistration);System.out.println("Service deregistered from Consul");}
}
服务发现
import com.orbitz.consul.Consul;
import com.orbitz.consul.model.catalog.CatalogService;import java.util.List;public class ConsulServiceDiscovery {public static void main(String[] args) {// 创建Consul实例,连接到本地Consul代理Consul consul = Consul.builder().build();// 获取所有服务List<CatalogService> services = consul.catalogClient().getServices().getResponse();// 打印服务名称for (CatalogService service : services) {System.out.println(service.getServiceName());}}
}
3.1.2.5 总结

img

参考资料:

eureka、consul、nacos三大产品对比 - ☆野生架构师☆ - 博客园

).getServices().getResponse();

    // 打印服务名称for (CatalogService service : services) {System.out.println(service.getServiceName());}
}

}


#### 3.1.2.5 总结[外链图片转存中...(img-7K64nSwU-1735826422036)]参考资料:[eureka、consul、nacos三大产品对比 - ☆野生架构师☆ - 博客园](https://www.cnblogs.com/shumtn/p/13391470.html)

相关文章:

SpringCloud(二)--SpringCloud服务注册与发现

一. 引言 ​ 前文简单介绍了SpringCloud的基本简介与特征&#xff0c;接下来介绍每个组成部分的功能以及经常使用的中间件。本文仅为学习所用&#xff0c;联系侵删。 二. SpringCloud概述 2.1 定义 ​ Spring Cloud是一系列框架的有序集合&#xff0c;它巧妙地利用了Spring…...

JavaVue-Get请求 数组参数(qs格式化前端数据)

前言 现在管理系统&#xff0c;像若依&#xff0c;表格查询一般会用Get请求&#xff0c;把页面的查询条件传递给后台。其中大部分页面会有日期时间范围查询这时候&#xff0c;为了解决请求参数中的数组文件&#xff0c;前台就会在请求前拦截参数中的日期数组数据&#xff0c;然…...

Java-多种方法实现多线程卖票

Java多线程卖票是一个经典的并发编程问题,它展示了如何在多个线程之间安全地共享和修改资 源。以下是几种实现方式: 使用synchronized关键字: 使用synchronized修饰符来同步方法或代码块,确保同一时刻只有一个线程可以访问临界区(即操 作共享资源的代码)。 使用Reen…...

LLVM防忘录

目录 Windows中源码编译LLVMWindows下编译LLVM Pass DLL Windows中源码编译LLVM 直接从llvm-project下载源码, 然后解压后用VS2022打开该目录, 然后利用VS的开发终端执行: cmake -S llvm -B build -G "Visual Studio 17 2022" -DLLVM_ENABLE_PROJECTSclang -DLLVM_…...

Elasticsearch:基础概念

一、什么是Elasticsearch Elasticsearch是基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产规模工作负载的速度和相关性进行了优化。使用 Elasticsearch 可以近乎实时地搜索、索引、存储和分析各种形状和大小的数据。Elasticsearch 是…...

【快速实践】类激活图(CAM,class activation map)可视化

类激活图可视化&#xff1a;有助于了解一张图像的哪一部分让卷积神经网络做出了最终的分类决策 对输入图像生成类激活热力图类激活热力图是与特定输出类别相关的二维分数网格&#xff1a;对任何输入图像的每个位置都要进行计算&#xff0c;它表示每个位置对该类别的重要程度 我…...

从零开始自搭SpringBoot项目 -- Qingluopay项目工程介绍

从零开始自搭项目 – QingLuoPay 一&#xff0c;为什么要从零开始自搭项目 首先在介绍这个项目之前先介绍一下我为什么要选择从零自搭项目&#xff0c;而不是跟着网上哪些视频等做项目。 之前的很长一段时间我也都是在网上找一些做项目的视频就包含黑马的&#xff08;神领物…...

使用 Jupyter Notebook:安装与应用指南

文章目录 安装 Jupyter Notebook1. 准备环境2. 安装 Jupyter Notebook3. 启动 Jupyter Notebook4. 选择安装方式&#xff08;可选&#xff09; 二、Jupyter Notebook 的基本功能1. 单元格的类型与运行2. 可视化支持3. 内置魔法命令 三、Jupyter Notebook 的实际应用场景1. 数据…...

.NET框架用C#实现PDF转HTML

HTML作为一种开放标准的网页标记语言&#xff0c;具有跨平台、易于浏览和搜索引擎友好的特性&#xff0c;使得内容能够在多种设备上轻松访问并优化了在线分享与互动。通过将PDF文件转换为HTML格式&#xff0c;我们可以更方便地在浏览器中展示PDF文档内容&#xff0c;同时也更容…...

使用 httputils + chronicle-bytes 实现金融级 java rpc

1、认识 chronicle-bytes Chronicle-Bytes 是一个类似于 Java NIO 的 ByteBuffer 的高效字节操作库&#xff0c;但它提供了许多扩展功能。这个项目由 OpenHFT 开发并维护&#xff0c;旨在提供高性能、低延迟的数据处理解决方案。Chronicle-Bytes 设计用于高频率交易和其他对性…...

开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势-利用KOR框架实现结构化输出(七)

一、前言 目前,大语言模型已升级至Qwen2.5版本。无论是语言模型还是多模态模型,均在大规模多语言和多模态数据上进行预训练,并通过高质量数据进行后期微调以贴近人类偏好。在本篇学习中,将集成vllm实现模型推理加速,现在,我们赶紧跟上技术发展的脚步,去体验一下新版本模…...

利用大语言模型解决推理任务

利用大语言模型&#xff08;Large Language Models, LLMs&#xff09;来解决推理任务是目前人工智能领域中的一个重要研究方向。大语言模型&#xff0c;如GPT系列&#xff08;包括ChatGPT&#xff09;和BERT等&#xff0c;具有强大的自然语言理解和生成能力&#xff0c;已经能够…...

修复OpenLinkSaas客户端在使用AtomGit账号时页面崩溃

问题描述&#xff1a;当一个新的AtomGit用户登录OpenLinkSaas客户端后出现了页面崩溃。 从浏览器控制台来看&#xff0c;是gitNoticeList出现了null。 查看代码后发现是请求atomGit api是返回的一个null的列表 接下来我们加下保护性的代码&#xff0c;来兼容null或undefine的情…...

如何使用大语言模型进行事件抽取与关系抽取

诸神缄默不语-个人CSDN博文目录 文章目录 1. 什么是事件抽取与关系抽取&#xff1f;2. 示例&#xff1a;使用大语言模型进行事件抽取与关系抽取 1. 什么是事件抽取与关系抽取&#xff1f; 事件抽取是指从文本中识别出与某些“事件”相关的信息。这些事件通常包括动作、参与者、…...

WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑&#xff1a; while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在执行函数内部&#xff0c;就是一个while死循环&#xff0c;只做两件事&#xff0c;从队列里Get取…...

Unity3D ILRuntime开发原则与接口绑定详解

引言 ILRuntime是一款基于C#的热更新框架&#xff0c;使用IL2CPP技术将C#代码转换成C代码&#xff0c;支持动态编译和执行代码&#xff0c;适用于Unity3D的所有平台&#xff0c;包括Android、iOS、Windows、Mac等。本文将详细介绍ILRuntime在Unity3D中的开发原则及接口绑定技术…...

grouped = df.drop(‘name‘, axis=1).groupby(‘team‘)

这行代码&#xff1a; grouped df.drop(name, axis1).groupby(team)的作用是首先删除 DataFrame 中的 name 列&#xff0c;然后按 team 列进行分组。以下是对每个部分的详细解释&#xff1a; 1. df.drop(name, axis1) df.drop(name, axis1) 这部分代码会从 DataFrame df 中…...

mysqll连接用时太长解决方法

1、连接用时太长分析 从客户端连接mysql服务器&#xff0c;时间长达10几秒&#xff0c;此为mysql的dns的反向解析造成&#xff0c;在局域网内如果都是用ip连接&#xff0c;可以通过在配置文件中添加skip-name-resolve&#xff0c;取消此功能&#xff0c;取消后&#xff0c;就不…...

Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询

作者&#xff1a;来自 Elastic Valentin Crettaz 了解 AutoOps 如何帮助你调查困扰集群的长期搜索查询以提高搜索性能。 AutoOps 于 11 月初在 Elastic Cloud Hosted 上发布&#xff0c;它通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 Au…...

SpringCloud源码-Ribbon

一、Spring定制化RestTemplate&#xff0c;预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…...

使用Python,pypinyin将汉字转为带音调,首字母等多种风格的拼音,自动学习生字词

使用Python&#xff0c;pypinyin将汉字转为带音调&#xff0c;首字母等多种风格的拼音&#xff0c;自动学习生字词 1. 效果图2. 安装及支持的音调分类3. 源码参考 这篇博客将介绍如何使用Python&#xff0c;pypinyin将汉字转为带音调的拼音&#xff0c;自动学习生字词&#xff…...

消防设施操作员考试题库及答案

一、单选题 1.根据国家标准《防火门》(CB1295~2008)的规定&#xff0c;门扇上带防火玻璃的防火门的代号为&#xff08;&#xff09;。 A.s B.bl C.b D.l 答案&#xff1a;C 解析&#xff1a;根据初级教材238页&#xff0c;门扇上带防火玻璃的防火门的代号为b。 2.关于彩…...

算法:IMPACT通过微生物特征分析可解释的微生物表型

文章目录 介绍框架代码参考 介绍 人类肠道微生物群由数万亿细菌组成&#xff0c;对健康和疾病有重大影响。通过现代技术的进步&#xff0c;高通量分析提供了增强我们对微生物组与复杂疾病结果之间联系的理解的潜力。然而&#xff0c;目前的微生物组模型缺乏微生物特征的可解释…...

2、zookeeper和kafka

zookeeper zookeeper基本知识 zookeeper&#xff1a;开源的分布式框架协调服务 zookeeper的工作机制 基于观察者模式设计的分布式结构&#xff0c;复制存储和管理架构当中的元信息&#xff0c;架构当中的应用接受观察者的监控&#xff0c;一旦数据有变化&#xff0c;通知对于…...

监控工具(Nagios)

2.4 Nagios 2.4.1 基础概念讲解 嘿&#xff0c;小伙伴们&#xff01;我们已经见识过了Prometheus、Grafana和Zabbix的强大功能&#xff0c;现在是时候认识一下监控界的“老大哥”——Nagios了&#xff01;Nagios是一款历史悠久的开源监控工具&#xff0c;虽然它可能没有像Zab…...

c++不够用知识补充-using namespace

感觉c的知识储备不够用了&#xff0c;忘记的再捡起来&#xff1f;&#xff01; C之using namaspace;(未完)_namspace include-CSDN博客文章浏览阅读238次。初学C时&#xff0c;只要是程序都是用这个来打头。#includeusing namespace std;以前也不求甚解&#xff0c;知道随着对…...

奇异值分解SVD

线性变换 SVD在2*2矩阵 SVD推广到任意大小矩阵 去掉奇异值小的部分&#xff1a; 原始的时空矩阵模式1模式2模式3...

如何在 Windows 10/11 上录制带有音频的屏幕 [3 种简单方法]

无论您是在上在线课程还是参加在线会议&#xff0c;您都可能需要在 Windows 10/11 上录制带有音频的屏幕。互联网上提供了多种可选方法。在这里&#xff0c;本博客收集了 3 种最简单的方法来指导您如何在 Windows 10/11 上使用音频进行屏幕录制。请继续阅读以探索&#xff01; …...

Linux centos7 docker安装 (yum快速安装)

Linux centos7 docker安装 &#xff08;yum快速安装&#xff09; 1. 查看内核1.1 内核升级操作&#xff08;可选&#xff09; 2. 部署docker2.1 卸载旧版本2.2 安装需要的软件包2.3 添加阿里云镜像源2.4 部署docker&#xff08;可手动选择版本&#xff0c;默认安装最新版本&…...

深入Android架构(从线程到AIDL)_08 认识Android的主线程

目录 3、 认识Android的主线程(又称UI线程) 复习&#xff1a; 各进程(Process)里的主线程​编辑 UI线程的责任&#xff1a; 迅速处理UI事件 举例 3、 认识Android的主线程(又称UI线程) 复习&#xff1a; 各进程(Process)里的主线程 UI线程的责任&#xff1a; 迅速处理UI事…...

接受Header使用错Map类型,导致获取到的Header值不全

问题复现 在 Spring 中解析 Header 时&#xff0c;我们在多数场合中是直接按需解析的。例如&#xff0c;我们想使用一个名为 myHeaderName 的 Header&#xff0c;我们会书写代码如下&#xff1a;RequestMapping(path "/hi", method RequestMethod.GET) public Str…...

等保测评和密评的相关性和区别

等保测评和密评在网络安全领域均扮演着至关重要的角色&#xff0c;它们之间既存在相关性&#xff0c;又各具特色。 以下是对两者相关性和区别的详细阐述&#xff1a;相关性 1.法律基础&#xff1a;等保测评和密评都是依据国家相关法律法规开展的活动。 等保测评主要依据《网…...

朱姆沃尔特隐身战舰:从失败到威慑

前言 "朱姆沃尔特"号驱逐舰是美国海军雄心勃勃的项目&#xff0c;旨在重塑未来海战。它融合了隐身、自动化和强大火力&#xff0c;然而由于技术问题和预算超支&#xff0c;原计划建造32艘的目标被大幅缩减&#xff0c;最终只建造了三艘。该舰的设计特点包括“穿浪逆船…...

create-a-weather-app-using-flask-python

使用 Flask | Python 创建天气应用程序 原文:https://www . geesforgeks . org/create-a-weather-app-use-flask-python/ 先决条件: 烧瓶安装 Flask 是一个用 Python 编写的轻量级框架。它是轻量级的&#xff0c;因为它不需要特定的工具或库&#xff0c;并且允许快速的 web 开…...

BurpSuite2024.11

新增功能 2024 年 11 月 25 日&#xff0c;版本 24.11 此版本引入了站点地图过滤器 Bambdas、匹配和替换 Bambdas、用于 API 扫描的动态身份验证令牌&#xff0c;以及用于入侵者攻击的增强负载管理。我们还进行了多项用户体验改进、性能改进和一些错误修复。 使用 Bambdas 过…...

MyBatis-plus sql拦截器

因为业务需求&#xff0c;重新写了一套数据权限。项目中用的是mybtis-plus&#xff0c;正好MyBatis-Plus提供了插件数据权限插件 | MyBatis-Plus&#xff0c;那就根据文档来实现这个需求。 实现&#xff1a; 实现MultiDataPermissionHandler 首先创建MultiDataPermissionHan…...

springboot3 redis 批量删除特定的 key 或带有特定前缀的 key

在 Spring Boot 3 中与 Redis 一起使用时&#xff0c;可以通过 Redis 的命令来实现批量删除特定的 Key 或带有特定前缀的 Key。以下是实现方式和注意事项。 使用 RedisTemplate RedisTemplate 是 Spring Boot 提供的一个操作 Redis 的工具&#xff0c;支持各种 Redis 操作。 …...

若依框架(前后端分离)集成cas5.5

一、后端配置 1、添加cas依赖 在common模块pom添加spring-security-cas依赖&#xff1a; <!-- spring security cas--> <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-cas</artifactId> &l…...

区块链方向学习路线

学习路线图 下面是登链社区给出的区块链开发者的学习路线图 学习路线建议 对于一个区块链方向的学习者而言&#xff0c;首先要了解的是区块链理论知识&#xff0c;当你了解了区块链的理论知识之后&#xff0c;下面有三个方向来学习&#xff0c;可以通俗的理解为区块链方向的后…...

【从零开始入门unity游戏开发之——C#篇40】C#特性(Attributes)和自定义特性

文章目录 前言一、特性&#xff08;Attributes&#xff09;基本概念二、自定义特性1、自定义特性代码示例&#xff1a;2、应用自定义特性&#xff1a;3、解释3.1 **AttributeUsage 特性**3.2 特性的命名3.3 **构造函数**&#xff1a;3.4 **属性**&#xff1a; 4、使用反射获取特…...

Unity2D无限地图的实现(简单好抄)

说明&#xff1a;本教程实现的是在2D游戏中玩家在游戏中上下左右移动的时候自动进行地图拼接的功能&#xff0c;如果你只想实现左右移动的无限地图&#xff0c;那么这篇博客也能起到一定参考作用。 思路 第一步&#xff1a; 创建一个10*10的2D游戏对象当做地图 第二步创建一个…...

OSPF特殊区域(open shortest path first LSA Type7)

一、区域介绍 1、Stub区域 Stub区域是一种可选的配置属性。通常来说&#xff0c;Stub区域位于自治系统的边界&#xff0c;例如&#xff0c;只有一 个ABR的非骨干区域。在这些区域中&#xff0c;设备的路由表规模以及路由信息传递的数量都会大量减少。 kill 4 5类type 传递1 …...

工程师了解的Lua语言

1、关于lua语言 lua语言是用于嵌入式领域当中的一门脚本语言&#xff0c;其实在大学期间&#xff0c;我也没有接触过这门语言&#xff0c;但是在未来的发展之路当中&#xff0c;需要用到这门语言&#xff0c;所以在我的知识库当中添加这门语言知识是必要而且重要的&#xff0c;…...

每日一学——日志管理工具(Graylog)

5.2 Graylog 5.2.1 输入输出配置 嘿&#xff0c;小伙伴们&#xff01;今天我们要介绍的是Graylog——一款功能强大的日志管理工具。Graylog不仅可以帮助我们收集、存储和搜索日志数据&#xff0c;还可以通过丰富的插件系统进行扩展。让我们一起来看看如何配置Graylog来收集日…...

SQL Server中最大并行度详解

在 SQL Server 中&#xff0c;MAXDOP&#xff08;Maximum Degree of Parallelism&#xff0c;最大并行度&#xff09;是一个用于控制并行查询执行中最大可用 CPU 核心数的配置参数。通过设置 MAXDOP&#xff0c;你可以管理 SQL Server 在执行并行查询时使用多少个处理器核心&am…...

2453.学习周刊-2024年53周

封面 不要站在问题一边打败孩子&#xff0c;而是站在孩子一边打败问题&#xff0c;多从孩子的角度思考问题&#xff0c;帮助孩子一起解决问题 ✍优秀博文 SQL中历史数据处理实践指南新领导上任了&#xff0c;老员工该如何适应&#xff1f;主动接纳还是我行我素&#xff1f; ✍…...

硬件-射频-PCB-常见天线分类-ESP32实例

文章目录 一&#xff1a;常见天线1.1 PCB天线①蓝牙模块的蛇形走线-天线②倒F天线-IFA&#xff1a;③蛇形倒F天线-MIFA④立体的倒F天线-PIFA 1.2 实例示意图1.21 对数周期天线(LPDA):1.22 2.4GHZ的八木天线&#xff1a;1.23 陶瓷天线&#xff1a;1.24 外接天线&#xff1a; 二&…...

Golang的容器编排实践

Golang的容器编排实践 一、Golang中的容器编排概述 作为一种高效的编程语言&#xff0c;其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程&#xff0c;典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…...

关于大一上的总结

大一上总结 前言 源于学长们都喜欢写总结&#xff0c;今晚也正好听见一首有点触动心灵的歌&#xff0c;深有感慨&#xff0c;故来此写下这篇总结 正文 1.暑假前的准备 暑假之前姑且还是学习了基本的C语法&#xff0c;大概是到了结构体的地方&#xff0c;进度很慢&#xff0…...

SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪

SpringBoot教程&#xff08;三十二&#xff09; | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么&#xff1f;二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提&#xff1a; Agents 8.9.0 放入 …...