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

Spring Boot消息系统开发指南

消息系统基础概念

消息系统作为分布式架构的核心组件,实现了不同系统模块间的高效通信机制。其应用场景从即时通讯软件延伸至企业级应用集成,形成了现代软件架构中不可或缺的基础设施。

通信模式本质特征

同步通信要求收发双方必须同时在线交互,典型场景包括:

// 同步请求示例
Response response = client.syncSend(request);

异步通信则通过消息队列实现解耦,生产者与消费者可独立运作:

// 异步发送示例
messageChannel.send(MessageBuilder.withPayload(data).build());

消息传递范式对比

发布-订阅模式
  • 消息通过主题(topic)广播
  • 支持多订阅者并行消费
  • Kafka/RabbitMQ等中间件的实现案例:
@Bean
public MessageChannel pubSubChannel() {return new PublishSubscribeChannel();
}
点对点模式
  • 单生产者和单消费者绑定
  • 保证消息的独占性处理
  • ActiveMQ队列典型配置:

松耦合架构优势

通过消息代理实现的解耦架构带来三大核心价值:

  1. 组件独立性:服务升级不影响关联系统
  2. 弹性扩展:消费者实例可动态增减
  3. 容错设计:失败消息自动重试机制
@startuml
component Producer
queue MessageQueue
component ConsumerProducer -> MessageQueue : 发送消息
MessageQueue -> Consumer : 异步推送
@enduml

Spring生态集成

Spring Boot通过自动配置简化消息中间件集成:

implementation 'org.springframework.boot:spring-boot-starter-amqp'
implementation 'org.springframework.boot:spring-boot-starter-kafka'

核心抽象接口包括:

  • Message 消息容器接口
  • MessageChannel 通道契约
  • MessageHandler 处理端点

这种标准化设计使得应用能在不同消息协议(JMS/AMQP/Kafka)间无缝切换,同时保持业务逻辑的一致性实现。

Spring Messaging核心技术解析

消息抽象模型设计

Spring Messaging模块的核心抽象是Message接口,该接口采用payload-headers结构设计:

package org.springframework.messaging;public interface Message {T getPayload();  // 消息主体内容MessageHeaders getHeaders();  // 消息元数据容器
}

消息头(MessageHeaders)实现了Map接口,包含以下关键元数据:

  • ID:消息唯一标识符
  • TIMESTAMP:消息创建时间戳
  • CORRELATION_ID:消息关联ID
  • REPLY_CHANNEL:响应通道地址

通道机制实现原理

MessageChannel接口构成了管道过滤器架构的基础,支持两种通信模式:

@FunctionalInterface
public interface MessageChannel {long INDEFINITE_TIMEOUT = -1;default boolean send(Message message) {return send(message, INDEFINITE_TIMEOUT);}boolean send(Message message, long timeout);
}

实际应用场景包括:

  1. 点对点通道:通过DirectChannel实现严格的消息顺序处理
  2. 发布订阅通道:通过PublishSubscribeChannel实现广播模式

端点处理组件

消息端点作为处理流水线的关键节点,主要分为七种核心类型:

端点类型功能描述典型实现类
Message Transformer消息内容格式转换GenericTransformer
Message Filter消息过滤与路由决策MessageFilter
Message Router动态路由选择HeaderValueRouter
Splitter消息分片处理ExpressionEvaluatingSplitter
Aggregator消息聚合CorrelationStrategy
Service Activator服务方法调用MethodInvokingHandler
Channel Adapter外部系统协议适配MqttPahoMessageDrivenChannelAdapter

自动化配置机制

Spring Boot通过以下自动配置步骤简化消息系统搭建:

  1. 依赖检测:当classpath存在spring-messaging时触发自动配置
  2. 基础设施初始化
    • 默认注册DirectChannelPublishSubscribeChannel bean
    • 配置JSON消息转换器
  3. 端点扫描:自动发现@MessageMapping注解的处理方法

典型配置示例:

# RSocket服务器配置
spring.rsocket.server.port=9898
spring.rsocket.server.transport=tcp

协议适配层设计

Spring Messaging通过统一抽象支持多种消息协议:

@startuml
interface MessageChannel
interface MessageHandlerclass JmsChannelAdapter
class KafkaAdapter
class AmqpChannel
class RsocketRequesterMessageChannel <|-- JmsChannelAdapter
MessageChannel <|-- KafkaAdapter
MessageChannel <|-- AmqpChannel
MessageHandler <|-- RsocketRequester
@enduml

这种设计使得业务代码无需修改即可在不同协议间切换,例如从JMS迁移到Kafka仅需变更依赖配置:

// 替换前
implementation 'org.springframework.boot:spring-boot-starter-artemis'// 替换后  
implementation 'org.springframework.boot:spring-boot-starter-kafka'

响应式编程集成

对于响应式消息处理,Spring提供了ReactiveMessageHandler接口:

public interface ReactiveMessageHandler {Mono handleMessage(Message message);
}

结合Project Reactor实现背压控制:

@Bean
public ReactiveMessageHandler reactiveHandler() {return message -> Mono.fromRunnable(() -> {// 非阻塞处理逻辑System.out.println("Received: " + message.getPayload());});
}

RSocket协议集成

新型交互协议特性

RSocket作为现代消息协议的代表,基于TCP/WebSocket实现了多路复用双工通信机制。其核心优势体现在四种交互模型上:

  1. 请求响应模型:传统RPC式交互
@MessageMapping("get-user")
Mono getUserById(@Payload String id);
  1. 请求流模型:服务端推送数据流
@MessageMapping("stock-ticker")
Flux getRealTimeQuotes();
  1. 即发即弃模型:单向无确认通信
@MessageMapping("log-event")
Mono logEvent(LogEntry entry);
  1. 通道模型:全双工流式通信
@MessageMapping("chat-channel")
Flux chatSession(Flux inbound);

协议核心能力

RSocket协议栈包含以下关键技术特性:

  • 响应式流语义:内置背压控制机制
  • 会话恢复:网络中断后自动续接
  • 消息分片:支持大型二进制载荷传输
# 最大帧大小配置
spring.rsocket.server.max-frame-length=256KB
  • 心跳检测:通过keepalive帧维持连接
RSocketStrategies.builder().tcpClient(connector -> connector.keepAlive(Duration.ofSeconds(30)))

Spring集成实现

服务端配置

通过@MessageMapping声明RSocket端点:

@Controller
public class UserRSocketController {@MessageMapping("user.create")public Mono createUser(@Valid @Payload User user) {return userService.save(user);}
}

自动配置参数示例:

# RSocket服务器配置
spring.rsocket.server.port=7000
spring.rsocket.server.transport=websocket
客户端实现

使用RSocketRequester进行服务调用:

@Bean
public RSocketRequester requester(RSocketRequester.Builder builder) {return builder.tcp("localhost", 7000);
}public Flux getUsers() {return requester.route("user.list").retrieveFlux(User.class);
}

交互模型实践

请求/响应示例
// 服务端
@MessageMapping("echo")
public Mono echo(String input) {return Mono.just("Echo: " + input);
}// 客户端
Mono response = requester.route("echo").data("Hello RSocket").retrieveMono(String.class);
流式传输示例
// 服务端
@MessageMapping("random-numbers")
public Flux randomStream(@Payload int count) {return Flux.interval(Duration.ofSeconds(1)).map(i -> ThreadLocalRandom.current().nextInt()).take(count);
}

安全控制

集成Spring Security进行认证授权:

@Bean
PayloadSocketAcceptorInterceptor interceptor() {return (socketAcceptor, rsocketStrategies) -> BasicAuthenticationReactSocketAcceptor.create(socketAcceptor, rsocketStrategies, userDetailsService);
}

安全配置示例:

spring.rsocket.server.security.authentication=basic
spring.security.user.name=admin
spring.security.user.password=secret

性能优化建议

  1. 传输层选择

    • TCP:高性能二进制传输
    • WebSocket:浏览器兼容方案
  2. 编解码优化

RSocketStrategies.builder().encoders(encoders -> encoders.add(new Jackson2CborEncoder())).decoders(decoders -> decoders.add(new Jackson2CborDecoder()))
  1. 资源控制
# 连接超时设置
spring.rsocket.server.setup-timeout=30s
# 最大连接数
spring.rsocket.server.max-connections=1000

RSocket与Spring Boot的深度整合为构建响应式微服务提供了新的协议选择,其多模式交互能力特别适合物联网、实时交易等场景。通过声明式编程模型,开发者可以快速实现高性能的异步通信系统。

实战案例:用户服务集成

WebFlux+RSocket组合开发模式

在用户服务案例中,我们采用响应式编程模型实现RSocket通信。核心组件结构如下:

@Controller
@AllArgsConstructor
public class UserRSocket {private final UserService userService;@MessageMapping("new-user")public Mono createUser(@Valid @Payload User user) {return userService.saveUpdateUser(user);}@MessageMapping("all-users")public Flux getAllUsers() {return userService.getAllUsers();}
}

关键实现要点:

  1. 使用@MessageMapping声明RSocket端点,语义等同于WebFlux的@PostMapping
  2. 方法参数支持@Payload@Header等注解进行消息解构
  3. 返回类型为Mono/Flux实现非阻塞响应

自动配置要点

Spring Boot自动配置RSocket服务器的核心参数:

# RSocket服务器配置
spring.rsocket.server.port=9898
spring.rsocket.server.transport=tcp

启动日志验证配置生效:

Netty RSocket started on port(s): 9898

消息序列化处理

Jackson对响应式类型的特殊处理策略:

  1. Mono序列化为单对象JSON
  2. Flux序列化为JSON数组
  3. 支持时间类型转换配置:
@Bean
public Jackson2JsonEncoder jsonEncoder() {return new Jackson2JsonEncoder(Jackson2ObjectMapperBuilder.json().serializers(new JavaTimeModule()).build());
}

端到端测试流程

  1. 用户创建测试:
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"Test","email":"test@email.com"}' \
http://localhost:8080/users
  1. RSocket消息消费验证:
@Test
void shouldReceiveUsersViaRSocket() {requester.route("all-users").retrieveFlux(User.class).as(StepVerifier::create).expectNextCount(2).verifyComplete();
}

异常处理机制

RSocket特有的错误处理方式:

@MessageExceptionHandler
public Mono handleValidation(ValidationException ex) {return Mono.just(new ErrorMessage(ex.getMessage()));
}

响应格式:

{"error": "Invalid email format","timestamp": "2023-07-20T09:00:00Z"
}

该实现方案展示了如何将传统REST API与RSocket协议有机结合,在保持API兼容性的同时获得响应式编程的优势。通过自动配置机制,开发者可以快速构建支持多协议的消息驱动服务。

跨服务通信实现

RSocket动态代理机制

通过RSocketServiceProxyFactory实现声明式服务调用,其核心工作原理如下:

@Bean
public RSocketServiceProxyFactory proxyFactory(RSocketRequester.Builder builder) {return RSocketServiceProxyFactory.builder(builder.tcp("localhost", 9898)).blockTimeout(Duration.ofSeconds(5)).build();
}

动态代理自动处理以下逻辑:

  1. 方法签名到RSocket路由的映射
  2. 响应式类型(Mono/Flux)的透明转换
  3. 超时和重试策略应用

服务发现集成模式

结合服务注册中心实现端点动态发现:

# 服务发现配置
spring.cloud.discovery.enabled=true
rsocket.service.discovery.group=user-services

通过ServiceInstanceRSocketRequesterBuilder自动解析服务实例:

@Bean
public RSocketRequester requester(ServiceInstanceRSocketRequesterBuilder builder) {return builder.serviceId("user-service").routePrefix("api").build();
}

错误传播控制策略

响应式调用链中的异常处理方案:

public interface UserClient {@RSocketExchange("get-user")Mono getUser(@Payload String id).onErrorResume(RSocketTimeoutException.class, ex -> Mono.error(new ServiceTimeoutException())).retryWhen(Retry.backoff(3, Duration.ofMillis(100)));
}

关键错误处理维度:

  1. 超时异常转换
  2. 断路器模式集成
  3. 重试策略配置

性能优化实践

TCP层优化配置示例:

spring:rsocket:client:tcp:pool:max-connections: 200acquire-timeout: 10sbuffer-size: 16KB

消息处理优化建议:

  1. 使用ByteBuf直接内存分配
  2. 配置合适的帧分片大小
  3. 启用消息压缩
RSocketStrategies.builder().decoder(new Jackson2JsonDecoder()).encoder(new Jackson2JsonEncoder()).dataBufferFactory(new NettyDataBufferFactory(PooledByteBufAllocator.DEFAULT)).build();

该实现方案通过Spring Boot的自动配置机制,将RSocket的高级特性转化为简洁的编程模型,使开发者能够专注于业务逻辑而非通信细节。

总结与最佳实践

统一抽象的价值

Spring Messaging通过标准化接口(Message/MessageChannel)实现了多协议统一编程模型,其核心优势体现在:

// 协议无关的发送示例
@Autowired
private MessageChannel outputChannel;public void sendOrder(Order order) {outputChannel.send(MessageBuilder.withPayload(order).setHeader("priority", "HIGH").build());
}

该设计使得业务代码无需修改即可在JMS/AMQP/Kafka等协议间迁移,显著降低系统演进成本。

协议选型矩阵

根据业务场景选择合适通信模式:

场景特征推荐协议典型配置示例
低延迟请求响应RSocketspring.rsocket.server.transport=tcp
大规模消息堆积Kafkaspring.kafka.consumer.auto-offset-reset=earliest
企业级事务消息AMQPspring.rabbitmq.listener.simple.acknowledge-mode=manual
浏览器兼容推送WebSocket+STOMPspring.websocket.path=/ws-endpoint

生产环境关键配置

  1. 消息持久化
# RabbitMQ持久化配置
spring.rabbitmq.template.delivery-mode=persistent
# Kafka日志保留
spring.kafka.topic.retention.ms=604800000
  1. 集群部署策略
# Kafka消费者组配置
spring:cloud:stream:bindings:input:group: inventory-service-groupconsumer:concurrency: 3

云原生演进方向

Service Mesh集成方案:

@Bean
public RSocketRequester meshRequester(@Value("${service.mesh.gateway}") String gateway) {return RSocketRequester.builder().rsocketConnector(connector -> connector.metadataMimeType(MimeTypeUtils.APPLICATION_JSON_VALUE)).transport(TcpClientTransport.create(gateway, 7001));
}

未来可重点关注:

  1. 基于Kubernetes的服务绑定自动发现
  2. 跨集群消息路由
  3. 可观测性集成(指标/链路追踪)

相关文章:

Spring Boot消息系统开发指南

消息系统基础概念 消息系统作为分布式架构的核心组件&#xff0c;实现了不同系统模块间的高效通信机制。其应用场景从即时通讯软件延伸至企业级应用集成&#xff0c;形成了现代软件架构中不可或缺的基础设施。 通信模式本质特征 同步通信要求收发双方必须同时在线交互&#…...

【Elasticsearch】映射:Nested 类型

映射&#xff1a;Nested 类型 1.为什么需要 Nested 类型2.如何定义 Nested 类型3.相关操作3.1 索引包含 Nested 数据的文档3.2 查询 Nested 数据3.3 聚合 Nested 数据3.4 排序 Nested 数据3.5 更新 Nested 文档中的特定元素 4.Nested 类型的高级操作4.1 内嵌 inner hits4.2 多级…...

Vue3 + UniApp 蓝牙连接与数据发送(稳定版)

本教程适用于使用 uni-app Vue3 (script setup) 开发的跨平台 App&#xff08;支持微信小程序、H5、Android/iOS 等&#xff09; &#x1f3af; 功能目标 ✅ 获取蓝牙权限✅ 扫描周围蓝牙设备✅ 连接指定蓝牙设备✅ 获取服务和特征值✅ 向设备发送数据包&#xff08;ArrayBu…...

三种读写传统xls格式文件开源库libxls、xlslib、BasicExcel的比较

最近准备读写传统xls格式文件&#xff0c;而不是较新的xlsx&#xff0c;询问DeepSeek有哪些开源库&#xff0c;他给出了如下的简介和建议&#xff0c;还给出了相应链接&#xff0c;不过有的链接已失效。最后还不忘提醒&#xff0c;现在该用xlsx格式了。 以下是几个可以处理传统…...

Nature子刊同款的宏基因组免疫球蛋白测序怎么做?

免疫球蛋白A&#xff08;IgA&#xff09;是人体肠道黏膜分泌的主要抗体&#xff0c;它在塑造肠道微生物群落和维持肠道稳态中起着关键作用&#xff0c;有研究发现缺乏IgA的患者更容易患自身免疫性疾病和感染性疾病。 目前用于研究IgA结合的主要技术是IgA-SEQ&#xff0c;结合了…...

2025年牛客网秋招/社招高质量 Java 面试八股文整理

Java 面试 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。关键在于理解企业的需求&#xff0c;明确自己的定位&#xff0c;以及掌握一定的应试技巧。 笔试部分&#xff0c;通常是对基础知识、…...

ADI的BF609双核DSP怎么做开发,我来说一说(五)LAN口测试

作者的话 ADI的双核DSP&#xff0c;第二颗是Blackfin系列的BF609&#xff0c;这颗DSP我用了很久&#xff0c;比较熟悉&#xff0c;且写过一些给新手的教程。 硬件准备 ADSP-BF609-CORE&#xff1a;ADI BF609开发板 产品链接&#xff1a;https://item.taobao.com/item.htm?…...

行业赋能篇-2-能源行业安全运维升级

在能源行业&#xff0c;尤其是风电领域&#xff0c;运维作业往往面临“三高”挑战——高风险环境、高异构数据量&#xff09;、高合规要求。以海上风电场为例&#xff0c;传统运维依赖卫星电话沟通&#xff0c;数据记录碎片化&#xff0c;故障因信息传递延迟导致损失扩大。如何…...

飞云智能波段主图+多空短线决策副图指标,组合操盘技术图文解说

如上图&#xff0c;组合指标&#xff1a;主图-飞云智能波段&#xff0c;红线上红色K线标记&#xff0c;波段做多.副图指标-多空短线决策&#xff0c;跟踪做短线&#xff0c;红柱做多&#xff0c;绿柱短线卖出或做空。 实战操作中&#xff0c;我们在主图红色线支撑上红色K线出现…...

【51单片机】1. 基础点灯大师

1. 新建一个项目集一些基本操作 打开Keli软件&#xff0c;然后&#xff1a; 【Project】→【new μVision Project】→选择项目保存位置 建议文件名选一些通用的名字&#xff0c;如【Project】 左下角选择【Atmel】的【AT89C52】 弹出的【是否添加启动文件到文件夹下】&…...

RNN和CNN使用场景区别

RNN&#xff08;循环神经网络&#xff09;和 CNN&#xff08;卷积神经网络&#xff09;是深度学习中两种核心架构&#xff0c;它们的使用场景主要取决于数据结构和任务需求。以下是两者的关键区别及典型应用场景&#xff1a; 核心差异对比 维度RNN&#xff08;循环神经网络&a…...

PC端直接打印功能(包括两张图片合并功能)

一、 效果图 二、demo代码 <template><div class"box"><divref"printContent"class"print-content"><div class"print-title">打印图片</div><imgclass"preview-image":src"merged…...

Vue前端篇——项目目录结构介绍

&#x1f4d8; 前言 在正式开始学习 Vue 3 开发之前&#xff0c;了解并熟悉其项目目录结构是非常关键的第一步。一个清晰、规范的目录结构不仅有助于开发者高效地组织代码&#xff0c;还能显著提升项目的可读性和可维护性。 Vue 3 作为现代前端开发中广泛使用的主流框架之一&…...

基于端到端深度学习模型的语音控制人机交互系统

基于端到端深度学习模型的语音控制人机交互系统 摘要 本文设计并实现了一个基于端到端深度学习模型的人机交互系统,通过语音指令控制其他设备的程序运行,并将程序运行结果通过语音合成方式反馈给用户。系统采用Python语言开发,使用PyTorch框架实现端到端的语音识别(ASR)…...

原生js操作元素类名(classList,classList.add...)

1、classList classList属性是一个只读属性&#xff0c;返回元素的类名&#xff0c;作为一个DOMTokenList集合(用于在元素中添加&#xff0c;移除及切换css类) length:返回类列表中类的数量&#xff0c;该属性是只读的 <style> .lis { width: 200px; …...

抽象工厂模式深度解析:从原理到与应用实战

作者简介 我是摘星&#xff0c;一名全栈开发者&#xff0c;专注 Java后端开发、AI工程化 与 云计算架构 领域&#xff0c;擅长Python技术栈。热衷于探索前沿技术&#xff0c;包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践&#xff0c;乐于分享实战经验与…...

35.成功解决编写关于“江协科技”编写技巧第二期标志位积累的问题

江科大学长又发布了第二期的编写技巧&#xff01; 大家可以看看&#xff1a;https://space.bilibili.com/383400717 最后面给了一个未完成的任务&#xff1a; 这里我已经把这个问题给解决了&#xff01; 总代码放在资源里面&#xff0c;key.c放在文章最后面&#xff01;同时感…...

Linux常用命令学习手册

Linux常用命令学习手册https://download.csdn.net/download/2401_87690752/90953550 《Linux常用命令学习手册》提供了一份实用的Linux操作指南&#xff0c;主要收录了系统管理和文件操作等基础命令。内容涵盖了目录切换、文件查看、权限设置等核心功能&#xff0c;适合Linux初…...

Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(八):异步处理逻辑详解

在现代 Web 应用中&#xff0c;异步处理是实现流畅交互的核心技术。本文基于前几章实现的内容Tailwind CSS 实战&#xff1a;基于 Kooboo 构建 AI 对话框页面&#xff08;七&#xff09;&#xff1a;消息框交互功能添加-CSDN博客&#xff0c;深入解析 AI 对话框页面中异步逻辑的…...

Unreal从入门到精通之 UE4 vs UE5 VR性能优化实战

文章目录 前言:准备工作UE4 vs UE5 性能对比引擎核心技术方案对比UE5 优化总结项目设置可伸缩性组设置VolumetricCloud最后前言: 最近在使用UE5制作VR项目 制作完后发现,我们的场景一直很卡顿,场景优化也做到了极致,但是帧率最高也才30+ 但是我们看到一个竞品,他的帧率竟…...

COMSOL与MATLAB联合仿真人工智能的电学层析成像系统

关键词&#xff1a;MATLAB&#xff0c;电学层析成像&#xff0c;人工智能&#xff0c;图像重建&#xff0c;深度学习 一、引言 基于人工智能的电学层析成像系统是一种创新的检测技术&#xff0c;结合了电学层析成像技术与人工智能算法的优势。电学层析成像技术&#xff0c;简…...

配置sudo免密却不生效的问题

如图&#xff0c;我配置了dhcp4这个账号sudo免密&#xff0c;但是执行sudo的时候还是要输密码。 查看dhcp的用户组&#xff0c;是配置了一个wheel组&#xff0c;而wheel组配置的是需要密码。 我们用dhcp4用户执行sudo -l 发下他匹配了两条命令策略&#xff0c;一个是免密一个…...

大模型赋能:金融智能革命中的特征工程新纪元

一、AI进化论&#xff1a;从“判别”到“生成”的金融新战场 1.1 判别式AI的“痛点”与大模型的“破局” 想象这样一幅画面&#xff1a;银行风控模型像老式收音机&#xff0c;需要人工反复调试参数才能捕捉风险信号&#xff1b;而大模型则是智能调音台&#xff0c;能自动“听…...

Significant Location Change

一、Significant Location Change是什么 “Significant Location Change&#xff08;重大位置变化&#xff09;” 是苹果 iOS 系统中一项用于在应用未主动运行时&#xff0c;监测设备位置显著变化的功能。它主要通过基站、Wi-Fi 网络等信号来判断设备是否发生了有意义的位置移…...

springboot 微服务 根据tomcat maxthread 和 等待用户数量,达到阈值后,通知用户前面还有多少用户等待,请稍后重试

我们在java项目开发中&#xff0c;如何设置服务器最大负载&#xff0c;过了服务器承受范围之后&#xff0c;提示用户稍后重试&#xff0c;避免 服务器无法提供正常服务 如何设置服务器负载比如&#xff1a;最大线程数&#xff0c;等待数量等,请看&#xff1a;springtomcat 用户…...

LHA9924芯片可代替AD7190,CS5530

LHA9924是一款高性能、单芯片模数转换器(ADC)。该器件包括一个低噪声可编程增益放大器(PGA)、Δ-Σ调制器和数字滤波器。该ADC支持两种运行模式&#xff0c;可在功耗与分辨率之间实现最佳平衡。双通道多路复用器可以选择外部信号测量和内部ADC测试信号。具有使输入电路短路来测…...

短视频矩阵系统技术saas源头6年开发构架

在短视频内容爆发式增长的今天&#xff0c;短视频矩阵系统SAAS技术成为企业快速搭建视频平台的关键解决方案。本文将系统解析从技术源头到服务落地的全流程开发路径。 一、系统定义与技术基础 短视频矩阵系统是集视频上传、智能编辑、多端分享、高清播放于一体的综合性平台。其…...

枫之谷Artale端午节大当机----后端技术的巨大风险

枫之谷Artale在端午节活动造成大量玩家上线塞爆&#xff0c;进不去&#xff0c;甚至在最后时段大当机&#xff0c;造成数万玩家怒火。 这体现了后端技术的影响&#xff0c;它不像是前端技术只对少数人造成影响&#xff0c;只要一出事&#xff0c;就是大批的玩家一起面对崩溃的伺…...

前端删除评论操作(局部更新数组)

​评论的删除是局部删除&#xff0c;把所点击的评论id号传递给后端&#xff0c;通知后端在数据库中删除数据&#xff0c;并且返回数据&#xff0c;但是在前端并不直接接收返回的数据&#xff0c;而是触发回调事件&#xff0c;在前端上进行删除评论&#xff0c;首先通过pId观察他…...

数学复习笔记 28

前言 刷数学题非常爽啊。让我感觉自己能考一百四&#xff0c;一百五这种错觉。我和一个朋友说&#xff0c;我肯定能考一百四以上&#xff0c;他说他觉得我最多考一百二&#xff0c;笑死&#xff0c;我是这么菜的么。下面是线代第六章的例题的一些理解。我现在觉得考研数学不需…...