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

可扩展性设计架构模式——事件驱动架构

        事件驱动架构(Event-Driven Architecture, EDA)是一种可扩展性设计软件架构模式,它通过事件来触发和通信(以事件为核心),实现不同系统组件之间的解耦(促进应用程序或系统部件之间的松耦合通信)。这种模式特别适合于响应实时信息变化、高度分布式系统、以及需要大规模异步数据处理的应用。在这种架构中,事件是任何显著的事情或状态变化,这些事件通过消息系统进行传播,从而驱动整个系统的流程。

基本概念

事件(Event):事件是系统中发生的一个具体的事情,它可以是用户的操作(如点击)、系统的更新(如数据更新),或外部系统的输入(如传感器数据)。事件包含足够的信息来描述发生了什么,不包含具体的指令如何做。

事件生产者(Event Producer):事件生产者是创建并发布事件到事件处理系统的组件。例如,一个温度传感器可以是温度读数的事件生产者。

事件消费者(Event Consumer):事件消费者是订阅并响应事件的组件。它从事件通道接收事件,然后根据事件内容执行特定的处理逻辑。

事件通道(Event Channel):事件通道是事件从生产者传递到消费者的中介,它负责传输事件。这可以是消息队列、日志、服务总线等。

事件处理器(Event Handler):事件处理器是在事件消费者中处理接收到的事件的逻辑部分。

架构优势

  • 解耦:组件之间只通过事件进行通信,不直接调用对方的服务,从而实现松耦合。在EDA中,事件生产者和消费者之间不需要直接知晓对方,它们仅通过事件来交互。这种解耦合提高了系统的灵活性和可维护性。
  • 可扩展性:通过增加事件处理器和事件通道,可以轻松地扩展系统功能和处理能力。由于组件之间不直接交互,扩展系统功能(如添加新的事件处理器或事件来源)不会影响现有的业务逻辑。
  • 灵活性:可以在不影响其他组件的情况下修改、添加或移除事件的处理逻辑。
  • 响应性:事件驱动的本质使系统可以即时响应状态变化,适合需要快速反应的应用。

实现机制

事件驱动架构的实现通常依赖于以下技术:

  • 消息队列(如 Kafka, RabbitMQ):作为事件通道来异步传输消息。
  • 事件存储(如 Event Store):持久化事件数据。
  • Webhooks:用于实时数据传输。
  • 服务总线(如 Azure Service Bus):集成复杂的消息传输需求。

应用场景

  • 实时数据处理:实时分析用户行为或传感器数据,如金融交易系统、物联网设备管理。
  • 微服务架构:各微服务组件通过事件来交互,而非直接调用对方的API。
  • 异步任务处理:如电子商务中的订单处理,订单创建后可以触发多个后续处理事件。
  • 复杂事件处理:监控系统、预警系统。

详细推导原理和原因

        在事件驱动架构中,核心原理是发布-订阅模式。事件生产者不需要知道谁接收事件,只负责发布事件到一个共享的事件通道中。事件消费者订阅这些事件并根据事件类型或内容作出反应。这种模式的核心优势在于:

  • 隔离性:生产者和消费者的隔离降低了系统组件之间的依赖性,提高了系统的稳定性和可靠性。
  • 动态性:可以动态地添加或删除事件消费者而不影响生产者,使系统易于扩展和修改。

通俗解释和理解

可以将事件驱动架构比作一个现代化的邮局系统:

  • 事件生产者就像是寄信人,他们将不同的信件(事件)投递到邮局(事件通道)。
  • 事件通道是邮局系统,负责将信件分类并发送到正确的地址。
  • 事件消费者则像是收信人,他们只接收自己感兴趣的信件,并根据信件内容采取行动。

        这样的系统设计允许寄信人和收信人之间互不干涉,他们通过邮局这个中介机构来互相通信,从而维持了彼此的独立性和系统的整体效率。

实现流程

第一步:定义事件,明确哪些业务动作或状态变化应该触发事件

  • 原理:在事件驱动架构中,一个事件代表了一个明确的状态变化或业务行为。定义事件是确定哪些动作或变化应当被系统捕捉并触发后续流程的关键步骤。
  • 操作步骤
    1. 识别事件源:分析业务流程,找出需要触发通知的行为,例如订单的创建、支付和发货。
    2. 定义事件结构:为每个事件定义必要的信息结构,如订单号、客户ID、商品详情等。

第二步:设计事件模型,构建事件的数据结构和类型,确保它们能够准确反映业务的需求

  • 原理:事件模型定义了事件的数据格式和类型,它确保事件的信息被标准化和统一,便于不同的系统组件理解和处理。
  • 操作步骤
    1. 选择数据格式:通常使用 JSON 格式,因为它易于人类阅读和机器解析。
    2. 定义数据内容:详细指定每种事件包含的字段和数据类型。

第三步: 选择合适的消息队列或服务总线来传输事件,实现消息传递系统,如 Kafka 或 RabbitMQ。

  • 原理:消息传递系统负责在事件生产者和消费者之间安全可靠地传递事件消息。这个系统像是邮局,保证信件能准确送达。
  • 操作步骤
    1. 选择消息中间件:常用的有 Kafka、RabbitMQ等。这些工具支持高并发、数据持久化,并能保证消息不会因系统故障而丢失。
    2. 安装和配置:按照中间件的官方文档进行安装和基本配置。

第四步:编写事件生产者和消费者,生产者负责发布事件,消费者订阅并响应这些事件。

  • 原理:生产者负责生成和发送事件,消费者负责接收事件并根据事件内容执行相应操作。
  • 操作步骤
    1. 生产者实现
      • 监听关键业务行为。
      • 当这些行为发生时,生成并发送事件到消息系统。
    2. 消费者实现
      • 订阅感兴趣的事件。
      • 接收事件并处理,如更新数据库、发送邮件通知等。

第五步:部署和测试

  • 原理:部署到生产环境前需要充分的测试来确保系统的稳定性和性能。
  • 操作步骤
    1. 本地测试:在开发环境中模拟生产环境进行详细测试。
    2. 部署:将应用部署到生产服务器。
    3. 监控和优化:监控系统性能和稳定性,根据实际运行情况进行调整。

示例:基于事件驱动架构的简单电商系统

环境准备

开发环境:

  • Java JDK 11 或更高版本
  • Maven 或 Gradle(作为构建工具)
  • IntelliJ IDEA 或 Eclipse(作为开发环境)
  • RabbitMQ 服务器(用作消息中间件)

步骤 1:创建 Spring Boot 项目

使用 Spring Initializr (https://start.spring.io/)快速创建一个新的 Spring Boot 项目:

  • 选择 Maven 作为构建工具,Java 作为语言。
  • 添加依赖:Spring Web, Spring for RabbitMQ。

步骤 2:配置 RabbitMQ

在 application.properties 或 application.yml 文件中添加 RabbitMQ 的配置:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

步骤 3:创建事件模型

在项目中定义事件的数据模型。例如,创建一个订单事件类:

package com.example.demo.events;public class OrderEvent {private String orderId;private String status;// 构造器public OrderEvent(String orderId, String status) {this.orderId = orderId;this.status = status;}// getter 和 setterpublic String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}
}

步骤 4:创建事件生产者

定义一个服务来发布事件:

package com.example.demo.services;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.events.OrderEvent;@Service
public class OrderService {@Autowiredprivate RabbitTemplate rabbitTemplate;public void createOrder(String orderId) {OrderEvent event = new OrderEvent(orderId, "创建");rabbitTemplate.convertAndSend("订单队列", event);System.out.println("发送的订单事件: " + event.getOrderId());}
}

步骤 5:创建事件消费者

定义一个组件来消费事件:

package com.example.demo.listeners;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import com.example.demo.events.OrderEvent;@Component
public class OrderEventListener {@RabbitListener(queues = "orderQueue")public void onOrderEvent(OrderEvent event) {System.out.println("收到的订单事件:" + event.getOrderId() + " 状态为:" + event.getStatus());}
}

步骤 6:测试应用

        启动你的 Spring Boot 应用并调用 OrderService 的方法来发送一个事件。确保 RabbitMQ 服务正在运行,并且队列名称匹配。

package com.example.demo;import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import com.example.demo.services.OrderService;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@BeanCommandLineRunner runner(OrderService orderService) {return args -> {orderService.createOrder("12345");};}
}

步骤 7:部署到生产环境

        一旦本地测试通过,你可以将应用部署到生产服务器。确保生产环境中的 RabbitMQ 配置与开发环境保持一致。

        以上步骤详细说明了如何从零开始使用 Spring Boot 和 RabbitMQ 创建一个简单的事件驱动的订单处理系统。这为非专业人士提供了一个清晰的路径,以便理解和实施事件驱动架构。

总结

        事件驱动架构通过使用事件作为主要的通信方式,实现系统组件的高度解耦和动态互动。这种架构提供了高度的可扩展性和灵活性,特别适用于处理异步数据、实时响应以及构建微服务架构的系统。

相关文章:

可扩展性设计架构模式——事件驱动架构

事件驱动架构(Event-Driven Architecture, EDA)是一种可扩展性设计软件架构模式,它通过事件来触发和通信(以事件为核心),实现不同系统组件之间的解耦(促进应用程序或系统部件之间的松耦合通信&a…...

Prometheus 专栏 —— Prometheus安装、配置

配置文件基本结构 global: 全局配置 scrape_interval: 抓取目标指标的频率,默认为 1minevaluation_interval: 评估告警规则的频率,默认为 1minscrape_timeout: 抓取目标指标数据拉取超时,默认为 10s,如果出现 context deadline e…...

Java并发编程面试题:线程池Fork/Join(19题)

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

【每日学点鸿蒙知识】WebView代理、2D绘制矩形圆角、TextInput清理按钮、pdf滑动、icon配置问题

1、HarmonyOS Webview 支持设置代理功能吗? 使用Web的onInterceptRequest先拦截再代理来实现。具体可以参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#ZH-CN_TOPIC_0000001930757269__on…...

抽奖系统(1)(Java 实现)

1. 需求描述 1. 包含管理员的注册与登录 1) 注册包含:姓名、邮箱、手机号、密码 2) 登录包含两种方式 (1) 电话 密码登录 (2) 电话 短信登录;验证码获取 (3) 登录需要校验管理员身份 2. 人员管理:管理员支持创建普通用户,查看…...

数据库系统原理复习汇总

数据库系统原理复习汇总 一、数据库系统原理重点内容提纲 题型:主观题 1、简答题 第一章:数据库的基本概念:数据库、数据库管理系统、三级模式;两级映像、外码 第二章:什么是自然连接、等值连接; 第三…...

基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…...

鸿蒙next RCP网络请求工具类进阶版来了

前言: 各位同学大家好,有一段时间没有更新文章了,最近因为鸿蒙官方的网络请求换掉了了rcp 之前是使用http 这些都是原生开发的 当然有那种三方大家熟知的 axios (这个也是基于http 后面也会过时)所以大家还是要了解一下rcp的原生的网络请求的。那么我们…...

driftingblues6_vh靶机

首先把靶机换成NAT模式 使用 arp-scan 命令扫描网段内存活的主机,以获取靶机ip地址 arp-scn -l 尝试访问ip 使用御剑扫描子域名,尝试访问robots.txt文件 通过访问文件我们发现了一个/textpattern/textpattern目录 访问一下目录发现了登录页面 他还给了…...

Go语言入门

文章目录 零、Linux下Go的安装1.下载、解压2.添加环境变量3.验证安装4.初始化Go模块(1)cd到项目目录(2)初始化模块(3)获取依赖包(4)清理和验证依赖(5)检查 go.mod 文件(6)介绍 go.mod 和 go.sum 文件 5.项目目录结构 一、感性认识1.从 Hello world 开始2.加法函数 二、Go语法1.…...

VS Code中怎样查看某分支的提交历史记录

VsCode中无法直接查看某分支的提交记录,需借助插件才行,常见的插件如果git history只能查看某页面的改动记录,无法查看某分支的整体提交记录,我们可以安装GIT Graph插件来解决这个问题 1.在 VSCode的插件库中搜索 GIT Graph安装&a…...

【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用

AI搜索引擎如何改变传统SEO及其在内容营销中的作用 文章目录 AI搜索引擎如何改变传统SEO及其在内容营销中的作用1、什么是AI搜索引擎2、AI搜索引擎对SEO策略的影响3、AI搜索引擎在内容营销转型中的作用4、AI搜索引擎在营销领域的挑战、道德问题和未来5、总结 在当今的数字营销世…...

快速掌握Haproxy原理架构

文章目录 一、原理架构二、无负载均衡三、四层负载均衡的工作流程四、七层负载均衡工作流程五、基础属性mode 属性retries 属性maxconn 属性clitimeout 属性servtimeout 属性states uri 属性 一、原理架构 四层tcp代理:Haproxy仅在客户端和服务器之间双向转发流量&…...

Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】

第一种思路是先将它们都转换为小写或大写,再使用String类的startsWith()方法实现: 例如,如下的二个示例: "Session".toLowerCase().startsWith("sEsSi".toLowerCase()); //例子之一//例子之二String str "Hello Wo…...

如何提高Redis服务器的最大打开文件数限制

文章目录 如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制3. 修改Redis配置文件4. 修改systemd服务文件5. 重新加载systemd并重启Redis6. 验证更改 注意事项 如何提高Redis服务器的最大打开文件数限制 在运行高并发…...

React 组件通信完整指南 以及 自定义事件发布订阅系统

React 组件通信完整指南 1. 父子组件通信 1.1 父组件向子组件传递数据 // 父组件 function ParentComponent() {const [data, setData] useState(Hello from parent);return <ChildComponent message{data} />; }// 子组件 function ChildComponent({ message }) {re…...

代码随想录算法【Day5\Day6】

DAY5\Day6 1.熟悉哈希表的数据结构&#xff1a;数组、map和set&#xff0c;使用方法、使用场景 2.哈希表应用场景&#xff1a;解决给你一个元素&#xff0c;判断它在集合里是否出现过。 242.有效的字母异位词 本题用数组解决的。 class Solution { public:bool isAnagram(…...

Oracle 数据库执行计划的查看与分析技巧

目录 Oracle 数据库执行计划的查看与分析技巧一、什么是执行计划二、查看执行计划的方法&#xff08;一&#xff09;使用 EXPLAIN PLAN 命令&#xff08;二&#xff09;通过 SQL Developer 工具查看&#xff08;三&#xff09;启用 AUTOTRACE 功能 三、执行计划中的关键信息解读…...

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比

VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比 目录 VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比; 2.单变量时间序列预测 就是先vmd把变…...

QGIS二次开发(地图符号库操作)

实习三 地图符号库操作 3.1 任务要求 基于QGIS&#xff0c;实现地图符号的设计/存储与显示&#xff1b;基于QGIS实现一个点、线、面shp矢量图层文件的显示。通过设置引用的符号&#xff0c;改变矢量图层的显示效果&#xff1b;可编辑地图的符号库汇中的点符号、线符号、面符号…...

wordpress网站用token登入开发过程

生成跳转token 示例&#xff1a; function generate_login_token($user_id, $secret_key) {$payload [user_id > $user_id,timestamp > time(),];$payload_json json_encode($payload);$signature hash_hmac(sha256, $payload_json, $secret_key);return base64_en…...

Uniapp在浏览器拉起导航

Uniapp在浏览器拉起导航 最近涉及到要在浏览器中拉起导航&#xff0c;对目标点进行路线规划等功能&#xff0c;踩了一些坑&#xff0c;找到了使用方法。&#xff08;浏览器拉起&#xff09; 效果展示 可以拉起三大平台及苹果导航 点击选中某个导航&#xff0c;会携带经纬度跳转…...

在 CentOS 上安装 FFmpeg

在CentOS 上安装 FFmpeg 方法一&#xff1a;在线安装 添加 EPEL 和 RPM Fusion 源&#xff1a; sudo yum install epel-release sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm安装 FFmpeg&#xff1a; sudo yu…...

影刀进阶指令 | liblib反推 (SD AI绘图反推)

文章目录 影刀进阶指令 | liblib反推 (SD AI绘图反推)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 获取png地址2\. 打开页面3\. 上传png文件4\. 获取png的prompt信息 四. 运维 影刀进阶指令 | liblib反推 (SD AI绘图反推) 先看看我们要实现的功能&#xff0c;li…...

WebStorm 创建一个Vue项目

一、下载并安装WebStorm 步骤一 步骤二 选择激活方式 激活码&#xff1a; I2A0QUY8VU-eyJsaWNlbnNlSWQiOiJJMkEwUVVZOFZVIiwibGljZW5zZWVOYW1lIjoiVU5JVkVSU0lEQURFIEVTVEFEVUFMIERFIENBTVBJTkFTIiwiYXNzaWduZWVOYW1lIjoiVGFvYmFv77yaSkVU5YWo5a625qG25rAIOa0uW3peS9nOWupC…...

回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归…...

rust windwos 两个edit框

use winapi::shared::minwindef::LOWORD; use windows::{core::*,Win32::{Foundation::*,Graphics::Gdi::{BeginPaint, EndPaint, PAINTSTRUCT},System::LibraryLoader::GetModuleHandleA,UI::WindowsAndMessaging::*,}, };// 两个全局静态变量&#xff0c;用于保存 Edit 控件的…...

ArcGIS计算矢量要素集中每一个面的遥感影像平均值、最大值等统计指标

本文介绍在ArcMap软件中&#xff0c;基于矢量面要素集&#xff0c;计算在其中每一个面区域内&#xff0c;遥感影像的像元个数、平均值、总和等统计值&#xff0c;并将统计信息附加到矢量图层的属性表中的方法。 首先&#xff0c;明确一下本文的需求。现在有一个矢量面要素集&am…...

JavaScript高级程序设计基础(十一)

上接语言基础&#xff1a;JavaScript高级程序设计基础&#xff08;十) 五、集合引用类型 5.1 object 此处简单介绍object&#xff0c;object由两种方式可以创造&#xff1a;由构造函数new Object(),或者对象字面量。如果想要修改对象的值可以用点语法&#xff0c;如object.na…...

【服务器学习专栏 1.2 -- 带外管理】

请阅读 嵌入式学习必备专栏 文章目录 Overview服务器带外管理BMC 介绍BMC 特点BMC 工作原理 Overview 从技术的角度&#xff0c;网络管理可分为带外管理&#xff08;out-of-band&#xff09;和带内管理&#xff08;in-band&#xff09;两种管理模式。 带内管理&#xff0c;是指…...

《Vue3 二》Vue 的模板语法

在 React 中&#xff0c;想要编写 HTML&#xff0c;是使用 JSX&#xff0c;之后通过 Babel 将 JSX 编译成 React.createElement 函数调用&#xff1b;在 Vue 中&#xff0c;也支持 JSX 的开发模式&#xff0c;但大多数情况下都是使用基于 HTML 的模板语法&#xff0c;在模板中允…...

手机租赁平台开发全攻略打造高效便捷的租赁服务系统

内容概要 手机租赁平台开发&#xff0c;简单说就是让用户能轻松租赁各类手机的高效系统。这一平台不仅帮助那些想要临时使用高端手机的人们节省了不少资金&#xff0c;还为商家开辟了新的收入渠道。随着智能手机的普及&#xff0c;很多人并不需要长期拥有一部手机&#xff0c;…...

【Ext.js 初步入门】Ext.js 作用以及用法 概述

一、Ext.js的作用 首先我们需要了解类似Ext.js以及easyui类似产品的作用是什么。 我的理解是就是相当于一个组件库&#xff0c;它与bootstrap类似产品的区别在于&#xff0c;bootstrap与ext.js和easyui面向的问题不同&#xff0c;bootstrap面向的问题样式&#xff0c;ext.js和…...

基于源码剖析:深度解读JVM底层运行机制

每日禅语 佛说&#xff0c;给你修路的&#xff0c;是你自己&#xff1b;埋葬你的&#xff0c;也是你自己&#xff1b;帮助你的&#xff0c;是你自己&#xff1b;毁灭你的&#xff0c;也是你自己&#xff1b;成就你的&#xff0c;自然还是你自己。所以佛说&#xff1a;自作自受&…...

redis延迟队列

Redis延迟队列 Redis延迟队列是基于Redis构建的消息队列&#xff0c;用来处理需延迟执行的任务。 基本原理 它借助Redis的有序集合&#xff08;Sorted Set&#xff09;数据结构达成目的。会把任务及其执行时间分别当成成员与分值存进有序集合&#xff0c;由于执行时间作为分值&…...

GDPU Vue前端框架开发 期末赛道出勇士篇(更新ing)

记住&#xff0c;年底陪你跨年的不会仅是方便面跟你的闺蜜&#xff0c;还有孑的笔记。 选择题 1.下列选项用于设置Vue.js页面视图的元素是&#xff08;&#xff09;。 A. Template B. script C. style D. title 2.下列选项中能够定义Vuejs根实例对象的元素是&#xff08;&…...

WordPress TutorLMS插件 SQL注入漏洞复现(CVE-2024-10400)(附脚本)

0x01 产品描述: ‌Tutor LMS‌是一个功能强大的...

小程序配置文件 —— 14 全局配置 - tabbar配置

全局配置 - tabBar配置 tabBar 字段&#xff1a;定义小程序顶部、底部 tab 栏&#xff0c;用以实现页面之间的快速切换&#xff1b;可以通过 tabBar 配置项指定 tab 栏的表现&#xff0c;以及 tab 切换时显示的对应页面&#xff1b; 在上面图中&#xff0c;标注了一些 tabBar …...

基于python+Django+mysql文档格式转换工具系统设计与实现

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…...

异步线程池中,ThreadPoolTaskExecutor和ThreadPoolExecutor有什么区别?

异步线程池中&#xff0c;org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor和java.util.concurrent.ThreadPoolExecutor有什么区别&#xff1f; org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 和 java.util.concurrent.ThreadPoolExec…...

【机器学习】SVM支持向量机(二)

介绍 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种监督学习模型&#xff0c;广泛应用于分类和回归分析。SVM 的核心思想是通过找到一个最优的超平面来划分不同类别的数据点&#xff0c;并且尽可能地最大化离该超平面最近的数据点&#xff08;支持向量…...

基于NodeMCU的物联网电灯控制系统设计

最终效果 基于NodeMCU的物联网电灯控制系统设计 小程序关灯 上图展现了小程序关灯过程的数据传输过程&#xff1a;用户下达关灯指令→小程序下发关灯指令→MQTT服务器接收关灯指令→下位机接收与处理关灯指令。 项目介绍 该项目是“物联网实验室监测控制系统设计&#xff08;…...

源码安装redis后配置redis开机自启动

initd风格 #!/bin/sh ### BEGIN INIT INFO # Provides: redis # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop Redis server ### END…...

WebRTC服务质量(11)- Pacer机制(03) IntervalBudget

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…...

22.跳过报错(最简) C#例子

这是一个跳过报错的例子&#xff0c;如果代码出错了会自动跳过&#xff0c;代码正确了就正常执行。 然而这不是一种推荐的做法&#xff0c;正确的做法应该是使用bool类型的值去检测代码运行结果&#xff0c;然后分支判断&#xff0c;在代码内部解决错误。 这只是一种好玩的做…...

windows 本地node版本快速升级

文章目录 前言一、前置条件二、使用步骤1.查看node 安装位置2.下载指定的node 版本3.下载后进行解压缩4. 删除覆盖原来的node文件夹内容5. 验证 总结 前言 Node.js 是一个开源、跨平台的JavaScript运行时环境&#xff0c;它允许开发者在服务器端运行JavaScript代码。Node.js 基…...

windows安装mongodb

一.安装包准备 1.服务端下载 https://www.mongodb.com/try/download/communitya 按需选择&#xff0c;我们这里选择社区版 直接点download浏览器下载可能比较慢&#xff0c;可以尝试copy link后用三方下载软件&#xff0c;会快很多。 2.命令行客户端下载 https://www.mong…...

一文读懂混合专家模型(MoE)

一文读懂混合专家模型&#xff08;MoE&#xff09; 概述 混合专家模型&#xff08;Mixture of Experts&#xff0c;MoE&#xff09;是一种机器学习和深度学习中的模型架构&#xff0c;它通过多个“专家”子模型来处理不同类型的输入数据或任务。在MoE模型中&#xff0c;输入数…...

自然语言处理(NLP)中的事件检测和事件抽取

事件检测和事件抽取是自然语言处理&#xff08;NLP&#xff09;中的两个重要任务&#xff0c;主要用于从文本中识别和提取事件及其相关信息。这两个任务在信息检索、情报分析、新闻摘要等应用中具有重要意义。 事件检测&#xff08;Event Detection&#xff09; 事件检测的目…...

深度学习:基于MindSpore NLP的数据并行训练

什么是数据并行&#xff1f; 数据并行&#xff08;Data Parallelism, DP&#xff09;的核心思想是将大规模的数据集分割成若干个较小的数据子集&#xff0c;并将这些子集分配到不同的 NPU 计算节点上&#xff0c;每个节点运行相同的模型副本&#xff0c;但处理不同的数据子集。…...