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

springboot3 RestClient、HTTP 客户端区别

1 RestClient使用

   RestClient 是 Spring 6.1 M2 中引入的同步 HTTP 客户端,它取代了 RestTemplate。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应,这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解 RestClient 的功能以及它与 RestTemplate 的比较。

1.1 RestClient 和 RestTemplate

   RestTemplate,顾名思义,是基于模板设计模式构建的。它是一种行为设计模式,用于在方法中定义算法的框架,允许子类为某些步骤提供特定的实现。虽然这是一种强大的模式,但它会导致需要进行方法覆写,这可能是不方便的。

        为了改进这一点,RestClient 采用了 Fluent API。Fluent API 也是一种设计模式,它允许以一种使代码更易读和表达的方式进行方法链式调用,通常无需使用中间变量。从创建一个基本的 RestClient 开始:

RestClient restClient = RestClient.create();

1.2 使用各种 HTTP 方法发起请求

        与 RestTemplate 或其他 REST 客户端类似,RestClient 可以使用不同的 HTTP 方法发起请求。创建一个用于操作的 Article 类:

public class Article {Integer id;String title;// 构造函数和 getter/setter
}

1.2.1 使用 GET 请求获取资源

        GET 请求用于检索 Web 服务器上指定资源的数据,而不对其进行修改。通常,这是一个只读的操作!获取服务器响应的字符串(String):

String result = restClient.get().uri(uriBase + "/articles").retrieve().body(String.class);

1.2.2 使用 POST 请求创建资源

        POST 请求用于提交数据到 Web 服务器上,进行新的资源创建。资源通常是通过 URI 定义的。向服务器发送一篇 ID 为 1 的 Article

Article article = new Article(1, "How to use RestClient");
ResponseEntity<Void> response = restClient.post().uri(uriBase + "/articles").contentType(APPLICATION_JSON).body(article).retrieve().toBodilessEntity();

        由于指定了 APPLICATION_JSON Content Type,Jackson 库会自动将 Article 类实例序列化为 JSON。在本例中,使用 toBodilessEntity() 方法忽略了响应体。POST 端点不需要返回任何 Payload,通常也不会返回任何 Payload。

1.2.3 使用 PUT 请求更新资源

        接下来是 PUT 请求,用于更新或替换已经存在的资源。修改上一段中创建的 Article,URI 中的 ID 即表示要修改的资源:

Article article = new Article(1, "How to use RestClient even better");
ResponseEntity<Void> response = restClient.put().uri(uriBase + "/articles/1").contentType(APPLICATION_JSON).body(article).retrieve().toBodilessEntity();

        与 POST 请求一样,依靠 RestClient 对 Payload 进行序列化,并忽略响应。

1.2.4 使用 DELETE 请求删除资源

        使用 DELETE 请求从 Web 服务器上删除指定资源。与 GET 类似,通常不提供任何 Payload,而是在 URI 参数中指定要删除的资源:

ResponseEntity<Void> response = restClient.delete().uri(uriBase + "/articles/1").retrieve().toBodilessEntity();

1.3 反序列化响应

        通常,我们希望将请求序列化,并将响应反序列化为我们可以操作的类。RestClient 具有执行 JSON 到对象转换的功能,该功能由 Jackson 库提供。此外,由于共享使用了 Message Converter,因此可以使用 RestTemplate 支持的所有数据类型。通过 ID 获取一篇文章,并将其序列化为 Article 类的实例:

Article article = restClient.get().uri(uriBase + "/articles/1").retrieve().body(Article.class);

        当我们需要获取 List 等泛型类的实例时,指定 body 的类就比较复杂了。例如,如果我们想获取所有 Article,以 List<Article> 对象形式返回。在这种情况下,可以使用 ParameterizedTypeReference 抽象类来告诉 RestClient 我们要获取什么对象。甚至不需要指定泛型类型,Java 会自动推断出类型:

List<Article> articles = restClient.get().uri(uriBase + "/articles").retrieve().body(new ParameterizedTypeReference<>() {});

1.4 使用 Exchange 解析响应

   RestClient 包含 exchange() 方法。通过提供对底层 HTTP 请求和响应的访问权限,用于处理更复杂的情况。在这种情况下,库不会应用默认的 Handler,我们必须自己处理响应的 Status。

        比方说,当数据库中没有文章时,服务会返回 204 (No Content)状态代码。由于这种行为略显非标准,我们希望以一种特殊的方式来处理它。当状态代码等于 204 时,抛出一个 ArticleNotFoundException 异常;当状态代码不等于 200 时,抛出一个更通用的异常:

List<Article> article = restClient.get().uri(uriBase + "/articles").exchange((request, response) -> {if (response.getStatusCode().isSameCodeAs(HttpStatusCode.valueOf(204))) {throw new ArticleNotFoundException();} else if (response.getStatusCode().isSameCodeAs(HttpStatusCode.valueOf(200))) {return objectMapper.readValue(response.getBody(), new TypeReference<>() {});} else {throw new InvalidArticleResponseException();}
});

        由于我们在这里处理的是原始响应,因此还需要使用 ObjectMapper 对 Response Body 进行反序列化。

1.5 异常处理

        默认情况下,当 RestClient 在 HTTP 响应中遇到 4xx 或 5xx 状态码时,它会抛出一个 RestClientException 子类的异常。我们可以通过自定义 Status Handler 来覆盖这一行为。自定义 Status Handler,在找不到文章时抛出一个自定义异常:

Article article = restClient.get().uri(uriBase + "/articles/1234").retrieve().onStatus(status -> status.value() == 404, (request, response) -> {throw new ArticleNotFoundException(response)}).body(Article.class);

1.6 从 RestTemplate 构建 RestClient

        如果你已经在项目中使用上了 RestTemplate,也可以可从 RestTemplate 构建 RestClient

RestTemplate oldRestTemplate;
RestClient restClient = RestClient.create(oldRestTemplate);

2 HTTP 客户端区别

2.1 RestTemplate

   RestTemplate 是 Spring 框架提供的同步 HTTP 客户端,专用于发起 RESTful 请求。它通过封装 HTTP 请求和响应的样板代码,提供了一种简洁的方式与 REST 服务进行交互。

2.1.1 核心特性

  • 同步API: RestTemplate以同步方式运行,阻塞当前线程直到收到响应。
  • 模板方法: 提供了用于常见HTTP操作(GET、POST、PUT、DELETE等)的预定义方法。
  • 可定制性: 允许通过拦截器、错误处理程序和消息转换器进行定制。
  • 对象映射: 可以使用消息转换器自动将请求和响应体转换为Java对象。

2.1.2 优点和缺点

优点:

  • 使用简单易懂: RestTemplate 提供了直观的 API,简化了与 RESTful 服务的交互,开发者可以轻松上手。
  • 适用于简单用例: 对于常见的 CRUD 操作和简单的 HTTP 请求处理,RestTemplate 是一种方便的选择。
  • 与 Spring 生态系统良好集成: 作为 Spring 框架的一部分,RestTemplate 与 Spring 的其他组件紧密配合,能够无缝融入到 Spring 应用中。

缺点:

  • 同步特性可能在高并发场景中影响性能: 由于 RestTemplate 是同步的,调用线程会阻塞直到响应返回,这在高并发情况下可能导致性能瓶颈。
  • 对异步和响应式编程的支持有限: RestTemplate 不支持异步处理,也无法与响应式编程模式兼容,这使得它在需要非阻塞操作的场景中不够灵活。
  • 正在被 WebClient 取代: 随着 Spring 5 的推出,WebClient 作为更现代的 HTTP 客户端出现,逐渐成为 RestTemplate 的替代品,尤其是在响应式编程场景下。

2.1.3 使用 RestTemplate 的时机

   RestTemplate 适用于那些同步行为可接受且性能要求不高的简单用例。对于需要进行直接 REST 交互的中小型应用程序,RestTemplate 可能是一个理想的选择。特别是在以下情况下,它是不错的工具:

  • 简单的 CRUD 操作: 当应用程序主要处理创建、读取、更新和删除等基本 REST 操作时,RestTemplate 提供了简洁易用的 API。
  • 同步请求: 如果应用程序可以容忍同步请求,且并发需求不高,那么 RestTemplate 可以很好地满足需求。
  • 快速原型开发: 在开发阶段,RestTemplate 可以快速帮助构建和测试 RESTful API 的交互逻辑。

        然而,当需要处理复杂的异步操作、流式处理或者更高的并发需求时,应该考虑使用 WebClient 或 RestClient

2.2 WebClient

   WebClient 是在 Spring 5 中引入的非阻塞、响应式 HTTP 客户端,被设计为 RestTemplate 的替代品。它基于 Project Reactor 构建,支持异步和非阻塞操作。这种方式非常适合构建现代、可扩展的应用程序,特别是在需要高效处理高并发场景时,WebClient 能够显著提高性能和系统的响应能力。

   WebClient 提供了灵活且强大的 API,使开发者能够轻松处理复杂的 HTTP 交互,包括流式数据处理和异步操作。由于它与 Spring 的响应式编程模型紧密集成,因此对于现代微服务架构和高并发应用来说,WebClient 是一个至关重要的工具。

2.2.1 核心特性

  • 响应式 API: WebClient 利用 Mono 和 Flux 等响应式编程概念来进行异步操作,使开发者可以轻松处理单个或多个异步数据流。
  • 流畅接口: WebClient 提供了声明式、可读性强的 API,用于构建和执行 HTTP 请求,开发者可以通过链式调用方式轻松定义复杂的请求逻辑。
  • 非阻塞: WebClient 的非阻塞特性允许在不阻塞当前线程的情况下发起请求,从而提高了资源利用率,特别是在高并发场景下表现尤为出色。
  • 与 Spring 生态系统集成: WebClient 与 Spring Data ReactiveSpring Security 等其他 Spring 组件无缝集成,支持响应式数据访问和安全认证等功能,使得它能够完美融入 Spring 响应式堆栈。

2.2.2 优点和缺点

优点:

  • 非阻塞和异步: WebClient 支持非阻塞的异步操作,可以更高效地利用系统资源,特别是在处理大量并发请求时表现出色。
  • 并发请求的高性能: 通过异步处理和非阻塞 I/O,WebClient 能够处理更高的并发请求量,适合需要高吞吐量的应用场景。
  • 支持响应式编程: WebClient 与 Spring 的响应式编程模型紧密集成,支持 Mono 和 Flux,能够更自然地处理流式数据和异步操作。
  • 更适合现代应用程序架构: 对于微服务架构、响应式系统等现代架构,WebClient 提供了更丰富的功能和更高的灵活性,能够适应复杂的需求。

缺点:

  • 学习曲线更陡峭: 由于 WebClient 基于响应式编程模型,开发者可能需要掌握 Mono 和 Flux 等响应式编程概念,这对不熟悉响应式编程的开发者来说会有一定的学习难度。
  • 更复杂的错误处理: 与 RestTemplate 相比,WebClient 的错误处理可能更复杂,需要开发者在处理响应状态、异常和重试机制时更加小心和全面。

2.2.3 使用WebClient的时机

   WebClient 是大多数现代 Spring 应用程序的首选工具。它非常适合微服务架构、高流量应用程序,以及那些非阻塞行为至关重要的场景。在构建响应式系统或需要高效处理大量并发请求时,WebClient 是一个值得优先考虑的选择。无论是处理复杂的 HTTP 交互,还是构建高度可扩展的系统,WebClient 都能为开发者提供强大的功能和灵活性,使其能够轻松应对现代应用程序的需求。

2.3 RestClient

   RestClient 是 Spring HTTP 客户端领域的最新发展,作为 RestTemplate 的现代化和高效替代品引入。它旨在解决 RestTemplate 的一些局限性,同时结合了 WebClient 的最佳实践。

   RestClient 提供了更先进的功能,专注于优化性能和提高开发效率,尤其在处理 RESTful API 请求时,结合了响应式编程和非阻塞操作的优点。通过引入 RestClient,Spring 提供了一种更现代的解决方案,能够更好地满足当前和未来的应用需求。

2.3.1 核心特性和改进

  • 构建者模式: RestClient 使用构建者模式来构建请求,这种模式提供了更流畅、可读性更高的 API,使得请求的配置和管理更加直观和灵活。
  • 异步操作: 尽管 RestClient 的异步能力不如 WebClient 那么全面,但它通过 CompletableFuture 提供了一定程度的非阻塞能力,适合需要异步处理但不要求完全响应式的场景。
  • 响应式支持: RestClient 可以与 Project Reactor 等响应式编程框架集成,支持响应式编程模型,使其能够更好地适应现代应用程序的需求,并提高应用程序的可扩展性。
  • 简化的错误处理: RestClient 提供了改进的错误处理机制,使得异常处理和 HTTP 状态码的管理变得更加简单和直接,有助于提高开发效率和代码质量。

2.3.2 使用RestClient的时机

        当我们需要在 RestTemplate 的简单性和 WebClient 的高级特性之间取得平衡时,RestClient 是一个合适的选择。它适用于那些需要异步操作但不需要完全响应式编程的项目,提供了一种折衷方案。

        此外,如果您正在从 RestTemplate 迁移并希望逐步过渡,RestClient 也是一个很好的选择。它不仅保留了 RestTemplate 的易用性,还引入了现代化的特性,使得迁移过程更加平滑,同时为未来的需求提供了更多的灵活性。

2.4 三者比较

        以下是 RestTemplateWebClient 和 RestClient 的特性对比表:

特性RestTemplateWebClientRestClient
同步/异步同步异步同步/异步
API 风格模板方法流畅构建者流畅构建者
响应式部分
性能较低较高中等
复杂性较低较高中等
Spring 版本旧版本Spring 5+Spring 6.1+

2.4.1 重要考虑因素

  • 性能: 对于需要处理高并发和非阻塞操作的场景,WebClient 显然是最佳选择,它提供了高性能和良好的资源利用效率。
  • 复杂性: RestTemplate 提供了简单易用的 API,适合初学者和简单用例;而 WebClient 和 RestClient 提供了更多高级特性和灵活性,但复杂性也相应较高。
  • 项目需求: 如果您的项目需要同步行为和易用性,RestTemplate 可能已经足够。如果您正在构建现代响应式应用程序,WebClient 是最佳选择。RestClient 则提供了一种在这两者之间的平衡方案,适合那些需要异步操作但不完全响应式的场景。
  • Spring 版本: 选择客户端时,请确保与您当前使用的 Spring 版本兼容。RestTemplate 是较旧版本的选择,而 WebClient 和 RestClient 则需要较新的 Spring 版本。

2.4.2 建议

  • 新项目: 如果您正在开始一个新项目,优先考虑使用 WebClient,因为它提供了最佳的性能和响应式能力,适合现代应用程序的需求。
  • 现有项目: 对于已经使用 RestTemplate 的现有项目,如果计划迁移到更现代的客户端,RestClient 可以作为一个很好的过渡步骤,逐步引入异步和非阻塞特性。
  • 简单用例: 对于简单的 HTTP 请求和同步操作,RestTemplate 仍然是一个合适的选择,特别是在性能和复杂性要求不高的情况下。

相关文章:

springboot3 RestClient、HTTP 客户端区别

1 RestClient使用 RestClient 是 Spring 6.1 M2 中引入的同步 HTTP 客户端&#xff0c;它取代了 RestTemplate。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应&#xff0c;这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解 RestClient 的功能以及它与…...

智能手表不可插卡怎么用

一、连接蓝牙 智能手表一般都可以通过蓝牙连接手机&#xff0c;以实现一些基础功能。连接方式一般分为以下几步&#xff1a; 1、首先打开手机的蓝牙功能&#xff0c;并在蓝牙列表中搜索手表的设备名称。 2、找到手表的设备名称后&#xff0c;点击连接即可完成蓝牙连接。 3、…...

blender看不到导入的模型

参考&#xff1a;blender 快捷键 常见问题_blender材质预览快捷键-CSDN博客 方法一&#xff1a;视图-裁剪起点&#xff0c;设置一个很大的值 方法二&#xff1a;选中所有对象&#xff0c;对齐视图-视图对齐活动项-选择一个视图...

【Unity】 HTFramework框架(六十一)Project窗口文件夹锁定器

更新日期&#xff1a;2025年3月7日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 Project窗口文件夹锁定器框架文件夹锁定自定义文件夹锁定限制条件 Project窗口文件夹锁定器 在Project窗口中&#xff0c;文件夹锁定器能够为任何文件夹加…...

智能体开发:推理-行动(ReAct)思维链提示

人类在处理一个需要多个步骤才能完成任务时&#xff0c;显著特点是能够将言语推理&#xff08;内心独白&#xff09;和实际行动融合在一起&#xff0c;在面对陌生或不确定的情况时通过这种方法学习新知识&#xff0c;做出决策&#xff0c;并执行&#xff0c;从而应对复杂的任务…...

机试准备第11天

第一题是浮点数加法&#xff0c;目前写过最长的代码。 #include <stdio.h> #include <string> #include <iostream> #include <vector> using namespace std; int main() {string str1;string str2;while (getline(cin, str1) && getline(cin…...

【Proteus仿真】【STM32单片机】智能阳台控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用按键、LCD1604液晶、DHT11温湿度模块、PCF8591 ADC、光线传感器、PM2.5传感器、土壤湿度传感器、继电器、水泵、电灯、28BYJ48步进电机等。 主要…...

Manus AI Agent 技术解读:架构、机制与竞品对比

目录 1. Manus 是什么&#xff1f; 1.1 研发背景 1.2 技术特点 1.3 工具调用能力 1.4 主要应用场景 2. Manus 一夜爆火的原因何在&#xff1f; 2.1 技术突破带来的震撼 2.2 完整交付的产品体验 2.3 生态与开源策略 3. Manus 与其他 AI Agent 的对比分析 3.1 技术架构…...

【时间序列】因果推断:从时序数据中探寻“因”与“果”

在日常生活中&#xff0c;我们经常听到这样的问题&#xff1a;“为什么股票价格会突然下跌&#xff1f;”、“天气变化是否会影响销售额&#xff1f;”这些问题背后&#xff0c;其实都在试图寻找一种因果关系。然而&#xff0c;在时间序列数据中&#xff0c;探寻因果关系并不像…...

IDEA2023 使用枚举类型java: 非法字符: ‘\ufffd‘

一、异常&#xff1a; 二、原因 文件编码问题 IDE或文本编辑器的文件编码设置不正确&#xff0c;可能会导致在保存文件时引入了错误的字符。 三、解决 在IntelliJ IDEA中&#xff0c;你可以通过File -> Settings -> Editor -> File Encodings来设置。...

深度学习模型组件之优化器--基础优化器(GD、SGD、Mini-batch SGD)

深度学习模型组件之优化器–基础优化器&#xff08;GD、SGD、Mini-batch SGD&#xff09; 文章目录 深度学习模型组件之优化器--基础优化器&#xff08;GD、SGD、Mini-batch SGD&#xff09;1. 梯度下降&#xff08;Gradient Descent, GD&#xff09;1.1 基本原理1.2 优点与缺点…...

使用 AIStor、MLflow 和 KServe 将模型部署到 Kubernetes

在之前几篇关于 MLOps 工具的文章中&#xff0c;我展示了有多少流行的 MLOps 工具跟踪与模型训练实验相关的指标。我还展示了他们如何使用 MinIO 来存储作为模型训练管道一部分的非结构化数据。但是&#xff0c;一个好的 MLOps 工具应该做的不仅仅是管理您的实验、数据集和模型…...

宝塔 Linux 计划任务中添加运行项目网站PHP任务-定时任务

一、指定php版运行&#xff0c; cd /www/wwwroot/www.xxx.com/ && /www/server/php/56/bin/php think timedtasks start >> /tmp/timedtasks.log 2>&1 二、不指定php版 cd /www/wwwroot/www.xxx.com/ && php think timedtasks start >> …...

unity学习64,第3个小游戏:一个2D跑酷游戏

目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材&#xff0c;且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…...

rom定制系列------小米note3 原生安卓15 批量线刷 默认开启usb功能选项 插电自启等

小米Note 3搭载骁龙660处理器&#xff0c;1200万像素广角镜头、俗称大号版的小米6&#xff0c;官方最终版为12.0.1稳定版安卓9的固件。客户需要运行在安卓15的rom。根据原生官网的rom修改一些功能选项。以便客户操作需求。 定制资源说明 根据客户需求采用安卓15原生系统为底包…...

基于开源 AI 大模型、AI 智能名片及 S2B2C 商城小程序源码的个人 IP 用户运营策略研究

摘要&#xff1a;本文深入剖析了个人 IP 运营领域中用户运营的核心地位与关键作用&#xff0c;详细阐述了以拉新、留存和促活为主要方式的用户运营策略&#xff0c;旨在实现对用户的有效管理和用户价值的全面提升&#xff0c;进而延长用户生命周期&#xff0c;推动用户向消费者…...

什么是:马尔可夫博弈

什么是:马尔可夫博弈 马尔可夫博弈(Markov Game),也被称为随机博弈(Stochastic Game),是马尔可夫决策过程(MDP)在多智能体环境下的扩展。它描述了多个智能体在一个环境中相互作用的动态过程,每个智能体的决策不仅取决于当前环境状态,还会影响其他智能体的决策以及环…...

【探商宝】大数据企业销售线索平台:销售型公司的战略转型引擎

一、市场现状与销售型公司的核心痛点 在数字经济高速发展的2025年&#xff0c;全球企业获客成本较五年前增长超过300%&#xff0c;而B2B销售线索的平均转化率仍徘徊在15%-20%之间。这一矛盾背后&#xff0c;折射出传统销售模式的三重困境&#xff1a; ​数据孤岛导致决策滞后…...

用Ruby的Faraday库来进行网络请求抓取数据

在 Ruby 中&#xff0c;Faraday 是一个非常强大的 HTTP 客户端库&#xff0c;它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据&#xff0c;处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求&#xff0c;抓取数据并处理响应。 1.…...

Ubuntu的软件源

百度搜索 ubuntu清华镜像源 根据下面的网页&#xff0c;选择对应Ubuntu操作系统的源&#xff0c;一定要对应&#xff01;&#xff01;&#xff01; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上图的系统是16.04 xenial&#xff0c;这时就一定要使用16.04 xenial的源 …...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...