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

Rocketmq 和 Rabbitmq ,在多消费者的情况下,可以实现顺序消费吗

在多消费者的情况下,RocketMQ 和 RabbitMQ 都可以实现顺序消费,但它们的实现机制和适用场景有所不同。以下是对两者的详细分析和对比:


1. RocketMQ 的顺序消费

1.1 实现机制
  • 顺序消息:RocketMQ 支持顺序消息(Orderly Message),保证消息在同一个队列(MessageQueue)中按照发送顺序被消费。

  • 队列分配

    • RocketMQ 的 Topic 可以分为多个队列(MessageQueue),每个队列内的消息是严格有序的。

    • 消费者通过绑定到特定的队列来实现顺序消费。

  • 锁机制

    • 消费者在消费某个队列时,会锁定该队列,确保同一时间只有一个消费者消费该队列。

1.2 多消费者顺序消费
  • 队列分配策略

    • 在多消费者的情况下,RocketMQ 会将队列均匀分配给消费者。

    • 每个消费者只消费分配给自己的队列,从而保证队列内的消息顺序。

  • 示例

    • 假设 Topic 有 4 个队列(Queue0、Queue1、Queue2、Queue3),有 2 个消费者(ConsumerA、ConsumerB)。

    • RocketMQ 可能将 Queue0 和 Queue1 分配给 ConsumerA,Queue2 和 Queue3 分配给 ConsumerB。

    • ConsumerA 和 ConsumerB 分别顺序消费自己负责的队列。

1.3 适用场景
  • 严格顺序场景

    • 例如订单状态变更、库存扣减等需要严格保证顺序的业务场景。

  • 性能要求高

    • RocketMQ 的顺序消费性能较高,适合高并发场景。


2. RabbitMQ 的顺序消费

2.1 实现机制
  • 队列顺序

    • RabbitMQ 的队列本身是 FIFO(先进先出)的,消息在队列中是严格有序的。

  • 消费者竞争

    • 默认情况下,多个消费者会竞争同一个队列中的消息,无法保证顺序消费。

  • 独占队列

    • 通过将队列绑定到单个消费者,可以实现顺序消费。

2.2 多消费者顺序消费
  • 单队列单消费者

    • 每个队列只能由一个消费者消费,从而保证顺序。

    • 例如,创建多个队列,每个队列绑定一个消费者。

  • 路由策略

    • 使用自定义的路由策略,将需要顺序处理的消息路由到同一个队列。

  • 示例

    • 假设有一个订单 Topic,可以根据订单 ID 将消息路由到不同的队列。

    • 每个队列绑定一个消费者,确保同一个订单的消息由同一个消费者顺序处理。

2.3 适用场景
  • 简单顺序场景

    • 例如日志处理、任务队列等对顺序要求不严格的场景。

  • 灵活性高

    • RabbitMQ 的队列和路由机制非常灵活,适合复杂的消息路由需求。


3. RocketMQ 和 RabbitMQ 的对比

特性RocketMQRabbitMQ
顺序消费支持原生支持顺序消息需要手动实现顺序消费
多消费者顺序消费通过队列分配实现通过独占队列实现
性能高并发性能优秀性能较低,适合中小规模场景
灵活性队列分配固定,灵活性较低路由机制灵活,适合复杂场景
适用场景高并发、严格顺序场景(如订单系统)中小规模、灵活路由场景(如日志)

4. 实现顺序消费的最佳实践

4.1 RocketMQ 实现顺序消费
  1. 发送顺序消息

    • 使用 MessageQueueSelector 将同一业务的消息发送到同一个队列。

    java

    复制

    SendResult sendResult = producer.send(msg, new MessageQueueSelector() {@Overridepublic MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {int orderId = (int) arg;int index = orderId % mqs.size();return mqs.get(index);}
    }, orderId);
  2. 消费顺序消息

    • 使用 MessageListenerOrderly 保证顺序消费。

    java

    复制

    consumer.registerMessageListener(new MessageListenerOrderly() {@Overridepublic ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {for (MessageExt msg : msgs) {System.out.println("Consume message: " + new String(msg.getBody()));}return ConsumeOrderlyStatus.SUCCESS;}
    });
4.2 RabbitMQ 实现顺序消费
  1. 路由消息到同一队列

    • 根据业务 ID 将消息路由到同一个队列。

    java

    复制

    channel.basicPublish(exchangeName, routingKey, null, message.getBytes());
  2. 独占队列

    • 每个队列绑定一个消费者。

    java

    复制

    channel.basicConsume(queueName, true, consumer);

5. 总结

  • RocketMQ 原生支持顺序消费,适合高并发、严格顺序的场景。

  • RabbitMQ 需要通过独占队列和路由策略实现顺序消费,适合中小规模、灵活性要求高的场景。

  • 在实际项目中,可以根据业务需求选择合适的消息队列,并结合队列分配和路由策略实现顺序消费。

疑问

比如更新订单状态扣减库存,放入一个队列。多个消费者会出现两个动作被不同的消费者消费,但是总体还是先消费订单状态更新,再扣减库存是吗

在多个消费者的情况下,是否能够保证先消费订单状态更新,再扣减库存,主要取决于消息队列的设计和消费者的分配方式。

问题分析:

你提到的场景是:

  1. 更新订单状态(比如从“待支付”更新为“已支付”)
  2. 扣减库存(更新库存数量)

这两个动作逻辑上是紧密关联的,且有顺序要求:先更新订单状态,再扣减库存。如果这两个动作分别放入队列,并且由多个消费者消费,那么就需要确保这两个操作的顺序。

在多消费者情况下的情况:

  1. 同一个队列,多个消费者:

    • 如果你将“更新订单状态”和“扣减库存”放入 同一个队列 中,并且使用多个消费者来消费消息,理论上 每个消费者只会处理队列中的一条消息。因此,在这种情况下,队列的顺序是可以保证的,也就是说,消费者消费的顺序会与消息入队的顺序一致。
    • 比如:先入队的是“更新订单状态”,然后是“扣减库存”。消费者 A 会先消费“更新订单状态”消息,消费者 B 会消费“扣减库存”消息,确保顺序。
  2. 不同队列,多个消费者:

    • 如果你将“更新订单状态”和“扣减库存”放入 不同队列,则 每个队列的消费者是独立的,在这种情况下,消费者之间的顺序就无法保证了。
    • 比如,订单状态更新消息可能先入队列 A,而库存扣减消息可能先入队列 B。这意味着,如果队列 A 中的消费者先消费了“更新订单状态”消息,而队列 B 中的消费者稍后才消费“扣减库存”消息,或者相反,可能会导致库存先被扣减,订单状态后更新,导致逻辑错误。

    为了避免这种情况,通常你可以:

    • 通过消息关联:确保每一对更新订单状态和扣减库存的消息都有相同的标识(例如订单ID),让这两条消息进入相同的队列(或者确保它们的消费顺序)。
    • 使用事务性消息:在一些高级场景下,可以通过事务性消息机制(例如 RocketMQ 的事务消息)来保证多个操作的顺序和一致性。
  3. 分布式场景中的顺序消费问题:

    • 即使使用多个消费者,只有 同一个队列 中的消息顺序可以被保证。如果是跨多个队列,或者多个消费者对同一队列进行消费,则无法确保跨消费者的操作顺序。

总结:

  • 如果 更新订单状态 和 扣减库存 放入 同一个队列,那么多个消费者情况下,系统会保证消息的顺序性,因此 先消费订单状态更新,再扣减库存 是可以被确保的。
  • 如果这两个动作分别放入不同的队列,且由不同的消费者消费,就可能会出现顺序错乱,导致库存被扣减后再更新订单状态。

为了避免这种顺序问题,通常的做法是:

  • 将这些相关操作放入 同一个队列 中,确保顺序消费。
  • 使用 分布式事务 或 消息幂等性设计 来处理可能的异常和保证操作的一致性。

相关文章:

Rocketmq 和 Rabbitmq ,在多消费者的情况下,可以实现顺序消费吗

在多消费者的情况下&#xff0c;RocketMQ 和 RabbitMQ 都可以实现顺序消费&#xff0c;但它们的实现机制和适用场景有所不同。以下是对两者的详细分析和对比&#xff1a; 1. RocketMQ 的顺序消费 1.1 实现机制 顺序消息&#xff1a;RocketMQ 支持顺序消息&#xff08;Orderly …...

linux下安装【流媒体】SRS之安装与使用

一、 安装srs 这个是一个流媒体服务器。 1.1 github 获取源码 git clone https://github.com/ossrs/srs.git 或者下载国内的 git clone https://gitee.com/ossrs/srs 进去之后下载zip的 #直接使用当前最新的6.0release版本 &#xff0c;我下载的是zip的 下载了之后上传到…...

Qt QSettings用法

一、概述 QSettings类是Qt框架中的一个重要类&#xff0c;它主要用于存储和访问应用程序的设置和配置。 二、QSettings的构造方式 1、基于组织名和程序名的构造方式&#xff08;主要用于Windows注册表&#xff09; 1、explicit QSettings(const QString &organization,c…...

python学opencv|读取图像(六十)先后使用cv2.erode()函数和cv2.dilate()函数实现图像处理

【1】引言 前序学习进程中&#xff0c;先后了解了使用cv2.erode()函数和cv2.dilate()函数实现图像腐蚀和膨胀处理的效果&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;五十八&#xff09;使用cv2.erode()函数实现图像腐蚀处理-CSDN博客 pytho…...

【大数据安全分析】大数据安全分析技术框架与关键技术

在数字化时代&#xff0c;网络安全面临着前所未有的挑战。传统的网络安全防护模式呈现出烟囱式的特点&#xff0c;各个安全防护措施和数据相互孤立&#xff0c;形成了防护孤岛和数据孤岛&#xff0c;难以有效应对日益复杂多变的安全威胁。而大数据分析技术的出现&#xff0c;为…...

[笔记.AI]Deepseek-R1 各参数版本的蒸馏模型对比

备注&#xff1a;信息主要通过Deepseek-R1获得&#xff08;查询近一个月的在线资料并整理&#xff09;&#xff0c;然后我进行了相应整合。如有错误&#xff0c;希望指出&#xff0c;谢谢。 Deepseek-R1 蒸馏模型 对比维度1.5B7B8B14B32B70B 特有的突破性能力▸ 毫秒级响应(0.3…...

JAVA面向对象2(三大特征)

面向对象的三大特征&#xff1a;封装、继承、多态 封装&#xff1a; 封装&#xff0c;英文单词Encapsulation。 从广义的角度来说&#xff0c;将一块经常要使用的代码片段&#xff0c;定义到方法中&#xff0c;是封装。将多个方法和多个状态数据定义到类体中&#xff0c;也是一…...

Spring Cloud工程完善

目录 完善订单服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 完成商品服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 远程调用 需求 实现 1.定义RestTemplate 2.修改order-service中的OrderService 测试运行 Rest…...

AI大模型随机初始化权重并打印网络结构方法(以Deepseekv3为例,单机可跑)

背景 当前大模型的权重加载和调用&#xff0c;主要是通过在HuggingFace官网下载并使用transformer的库来加以实现&#xff1b;其中大模型的权重文件较大&#xff08;部分>100GB&#xff09;&#xff0c;若只是快速研究网络结构和数据流变化&#xff0c;则无需下载权重。本文…...

介绍下SpringBoot常用的依赖项

Spring Boot 是一个用于快速开发 Spring 应用程序的框架&#xff0c;它通过自动配置和依赖管理简化了开发过程。以下是一些 Spring Boot 项目中常用的依赖项&#xff1a; 1. Spring Boot Starter Web 作用: 用于构建 Web 应用程序&#xff0c;包括 RESTful 服务。依赖项: spr…...

第四节 docker基础之---dockerfile部署JDK

本地宿主机配置jdk 创建test目录&#xff1a; [rootdocker ~]# mkdir test 压缩包tomcat和jdk上传到root/test目录下&#xff1a; 本机部署Jdk 解压jdk&#xff1a; [rootdocker test]# tar -xf jdk-8u211-linux-x64.tar.gz [rootdocker test]# tar -xf apache-tomcat-8.5.…...

Vue基础:index.html、App.vue、main.js三个文件的联系

index.html、App.vue、main.js三个文件的联系 当vue项目npm run dev启动成功后&#xff0c; 浏览器就可以通过路径访问页面&#xff0c;那么这个页面到底展示的是哪个文件里的内容呢&#xff1f; 如果对前端vue有一定的基础知识&#xff0c;这篇文章可忽略。 在vue项目的目录结…...

数据库 绪论

目录 数据库基本概念 一.基本概念 1.信息 2.数据 3.数据库&#xff08;DB&#xff09; 4.数据库管理系统&#xff08;DBMS&#xff09; 5.数据库系统&#xff08;DBS&#xff09; 二.数据管理技术的发展 1.人工管理阶段 2.文件系统阶段 3.数据库系统阶段 4.数据库管…...

26~31.ppt

目录 26.北京主要的景点 题目 解析 27.创新产品展示及说明会 题目​ 解析 28.《小企业会计准则》 题目​ 解析 29.学习型社会的学习理念 题目​ 解析 30.小王-产品展示信息 题目​ 解析 31.小王-办公理念-信息工作者的每一天 题目​ 解析 26.北京主要的景点…...

AutoMQ 如何实现没有写性能劣化的极致冷读效率

前言 追赶读&#xff08;Catch-up Read&#xff0c;冷读&#xff09;是消息和流系统常见和重要的场景。 削峰填谷&#xff1a;对于消息来说&#xff0c;消息通常用作业务间的解耦和削峰填谷。削峰填谷要求消息队列能将上游发送的数据堆积住&#xff0c;让下游在容量范围内消费…...

启动gateway时Failed to configure a DataSource

问题 在启动网关时候启动失败,报错: 原因很明显,就是没有配制数据库连接信息 实际上是因为在网关模块中导入的某个依赖里面引入了MyBatis的依赖,导致启动的时候自动配置数据库源 但是在这个网关模块中是不需要数据数据库的 解决...

node 程序占用处理方法与后台运行方法

程序占用 如果你在关闭终端后重新运行 node server.js&#xff0c;但提示端口 3000 被占用&#xff0c;说明之前的服务器进程仍然在后台运行。以下是解决方法&#xff1a; 1. 检查后台运行的 Node.js 进程 首先&#xff0c;检查是否有 Node.js 进程正在占用端口 3000。 在 L…...

C# OpenCV机器视觉:对位贴合

在热闹非凡的手机维修街上&#xff0c;阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭&#xff0c;不是膜的边缘贴不整齐&#xff0c;就是里面充满了气泡&#xff0c;阿强心里就想&#xff1a;“要是我能有个自动贴膜的神器&#xff0c;那该多好啊&#xf…...

【计算机网络】TCP/IP 网络模型有哪几层?

目录 应用层 传输层 网络层 网络接口层 总结 为什么要有 TCP/IP 网络模型&#xff1f; 对于同一台设备上的进程间通信&#xff0c;有很多种方式&#xff0c;比如有管道、消息队列、共享内存、信号等方式&#xff0c;而对于不同设备上的进程间通信&#xff0c;就需要网络通…...

本地部署Deepseek R1

使用Ollama open-webui部署Deepseek R1 一、安装Ollama 官网地址&#xff1a;https://ollama.com/&#xff0c;点击下载按钮选择windows版本。并安装 打开命令提示符输入ollama&#xff0c;出现一下提示命令表示ollama安装完成 二、使用Ollama下载deepseek R1不同模型 打开o…...

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架

源码介绍 PHP盲盒商城系统源码 晒图免签短信验证在线回收 thinkphp框架 源码前端uniapp开发&#xff0c;可以打包成APP&#xff08;非H5封壳&#xff09;H5&#xff0c;接其他平台支付通道&#xff0c;前后端全开源 H5盲盒首页可以直接开盒新UI 修复优化BUG&#xff0c;修复无…...

[Do374]ansible-nagivator考前整理

[Do374]ansible-nagivator考前整理 1. Ansible-Navigator 升级后的变化1.1 主要变化1.2 重大改变 2. ansible主要配置文件2.1 .ansible-navigator.yml2.2 ansible.cnf 3. 常用模块3.1 file模块3.2 copy模块3.3 user模块和lookup模块3.4 yum和yum_repository模块3.5 systemd和se…...

deepseek+kimi自动生成ppt

打开deepseek官网&#xff0c;输入详细的需求&#xff0c;让他生成个ppt 接着deepseek开始思考生成了 接着复制生成了的内容 打开kimi粘贴刚才deepseek生成的内容 可以一键生成啦&#xff0c;下载编辑使用吧...

循环神经网络学习01——transformer:输入部分-嵌入层位置编码

一、介绍 1、核心思想 利用自注意力机制来捕获输入序列中各元素之间的全局依赖关系&#xff0c;无论这些元素之间的实际距离有多远。 自注意力机制&#xff1a;允许模型在处理序列的每个元素时&#xff0c;考虑到序列中的所有其他元素&#xff0c;从而捕捉它们之间的关系和依…...

centos系统清理docker日志文件

在CentOS系统中&#xff0c;Docker日志文件的不断增长可能会占用大量磁盘空间&#xff0c;影响系统性能和正常运行。为了保持系统的健康状态&#xff0c;需要定期清理Docker日志文件。本文将详细介绍如何在CentOS系统上清理Docker日志文件的具体步骤和方法。 Docker日志文件位…...

低成本+高性能+超灵活!Deepseek 671B+Milvus重新定义知识库搭建

“老板说&#xff0c;这个项目得上Deepseek,还得再做个知识库...” 还有哪个开发者&#xff0c;最近没听到这样的抱怨&#xff1f; Deepseek爆火&#xff0c;推理端的智能提速&#xff0c;算力成本急剧下降&#xff0c;让不少原本不想用大模型&#xff0c;用不起大模型的企业&a…...

Windows 本地部署大模型 OpenWebUI+Ollama

安装Ollama Ollama官方网址&#xff1a;https://ollama.com 下载运行大模型 在Ollama官网中查看需要下载的大模型 https://ollama.com/library 复制图片中的链接 打开cmd&#xff0c;运行此命令&#xff08;此过程会时间会很久&#xff09; 下载Miniconda Miniconda作用是…...

【iOS自动化】Xcode配置WebDriverAgent

WebDriverAgent 是 iOS 端自动化测试的工具&#xff0c;这里记录下 MacOS 环境 Xcode 如何配置 WebDriverAgent。 【重要】环境准备 ‼️ 注意&#xff1a;Xcode 版本需要支持对应的 iOS 版本&#xff0c;而 Xcode 版本又依赖 MacOS 版本&#xff1b;在开始部署前&#xff0c…...

RabbitMQ 延迟队列

1.延迟队列插件安装(版本号要对其&#xff09; Releases rabbitmq/rabbitmq-delayed-message-exchange GitHub 下载的文件: rabbitmq_delayed_message_exchange-3.13.0.ez 直接复制到以下文件夹&#xff1a; \RabbitMQ Server\rabbitmq_server-3.13.7\plugins\ 执行命令…...

JVM-Java虚拟机

基础知识 JVM的定义与作用 定义&#xff1a;JVM是Java语言的一部分&#xff0c;它是一个虚拟的计算机&#xff0c;通过它可以执行Java程序。 作用&#xff1a; 跨平台支持&#xff1a;实现了“编译一次&#xff0c;到处运行”的目标。 自动内存管理&#xff1a;通过垃圾回收…...

Unity底层C#处理机制深度解析

一、Unity脚本执行架构 Unity采用分层架构处理C#脚本&#xff0c;核心由以下组件构成&#xff1a; 脚本引擎层 Mono Runtime&#xff08;旧版本&#xff09; IL2CPP&#xff08;2015版本&#xff09; Burst Compiler&#xff08;DOTS体系&#xff09; 原生交互层 Runtime …...

【WB 深度学习实验管理】使用 PyTorch Lightning 实现高效的图像分类实验跟踪

本文使用到的 Jupyter Notebook 可在GitHub仓库002文件夹找到&#xff0c;别忘了给仓库点个小心心~~~ https://github.com/LFF8888/FF-Studio-Resources 在机器学习项目中&#xff0c;实验跟踪和结果可视化是至关重要的环节。无论是调整超参数、优化模型架构&#xff0c;还是监…...

MFC 应用最小化到系统托盘

本指南将实现 MFC 应用程序在关闭时最小化系统托盘的功能&#xff0c;并左键和右键系统托盘图标进行交互。 目标&#xff1a; 左键点击托盘图标&#xff1a;恢复对话框窗口。右键点击托盘图标&#xff1a;弹出右键菜单&#xff0c;提供 恢复窗口 和 退出程序 两个选项。退出时…...

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…...

【OCPP】ocpp1.6J协议框架说明

目录 1.简介 1.1.本文件的目的 1.2.目标受众 1.3. OCPP-S and OCPP-J 1.4. 约定 1.5.定义和缩写 1.6.参考 2.优点和问题 3.连接 3.1.客户要求 3.1.1.连接URL 3.1.2.OCPP版本 3.1.3.打开HTTP请求的示例 3.2.服务器响应 3.3.更多信息 4.RPC框架 4.1.介绍 4.1.1…...

Swipe横滑与SwipeItem自定义横滑相互影响

背景 vue项目&#xff0c;H5页面&#xff0c;使用vant的组件库轮播组件<Swipe>&#xff0c;UI交互要求&#xff0c;在每个SwipeItem中有内容&#xff0c;可自横滑&#xff0c;查看列表内容 核心代码 <template><Swipeclass"my_swipe":autoplay&quo…...

渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.&#xff08;主动扫描被动扫描&#xff09; Burp Suite 和 Xray 联合使用&#xff0c;能够将 Burp 的强大流量拦截与修改功能&#xff0c;与 Xray 的高效漏洞检测能力相结合&#xff0c;实现更全面、高效的网络安全测试&#xff0c;同时提升漏…...

C# 学习目录

以下内容仅供参考 基础概念 数据类型(使用与定义)-CSDN博客 var使用-CSDN博客 运算符&#xff08;new、sizeof、is、as)_new 运算符-CSDN博客 数据结构 数组定义与使用-CSDN博客 动态数组和泛型集合-CSDN博客 字典&#xff08;Dictonary)-CSDN博客 集合类型&#xff0…...

react native学习【9】——动态路由

react native学习【9】——动态路由 1、进入终端2、动态路由dynamic router3、编写app/_layout.jsx布局文件4、创建动态路由5、完善index.jsx文件6、完善[id].jsx文件扩展运算符...7、完整的index.jsx文件1、进入终端 2、动态路由dynamic router 官方网站 视频中的举例:当我们…...

[AI]Mac本地部署Deepseek R1模型 — — 保姆级教程

[AI]Mac本地部署DeepSeek R1模型 — — 保姆级教程 DeepSeek R1是中国AI初创公司深度求索&#xff08;DeepSeek&#xff09;推出大模型DeepSeek-R1。 作为一款开源模型&#xff0c;R1在数学、代码、自然语言推理等任务上的性能能够比肩OpenAI o1模型正式版&#xff0c;并采用MI…...

LeetCodehot 力扣热题100 验证二叉搜索树

class Solution {vector<int> nums; // 用来存储二叉树节点值的数组 public:bool isValidBST(TreeNode* root) {inorder(root); // 中序遍历二叉树&#xff0c;填充 nums 数组// 遍历 nums 数组&#xff0c;检查是否为严格递增序列for(int i0; i<nums.size()-1; i){…...

使用Kickstart配置文件封装操作系统实现Linux的自动化安装

使用Kickstart配置文件封装操作系统实现Linux的自动化安装 创建ks.cfg配置文件 可以使用已经安装完成的Linux操作系统中的/root目录下的anaconda.cfg配置文件 注意&#xff0c;配置文件会因为kickstart的版本兼容性的问题导致无法安装报错需要在实际使用过程中删除某些参数 …...

前端开发架构师Prompt指令的最佳实践

前端开发架构师Prompt 提示词可作为系统提示词使用&#xff0c;可基于用户的需求输出对应的编码方案。 本次提示词偏向前端开发的使用&#xff0c;如有需要可适当修改关键词和示例。 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使…...

flink判断两个事件之间有没有超时(不使用CEP)

1.为啥不使用cep呢&#xff0c;cep的超时时间设置不好配置化&#xff0c;无法满足扩展要求 2.超时怎么界定。A事件发生后&#xff0c;过了N时间&#xff0c;还没有收到B事件&#xff0c;算超时。 代码如下&#xff1a; import com.alibaba.fastjson.JSONObject; import lombo…...

vue3+ts+vite+element plus设置日期时间禁止选择小于当前时间精确到时分秒

ts组件 // timeUtils.ts/*** 生成一个数组* param start* param end*/ export const makeRange (start: number, end: number): number[] > {const result: number[] [];for (let i start; i < end; i) {result.push(i);}return result; };/*** 限制今天之前的时间不…...

2025web寒假作业二

一、整体功能概述 该代码构建了一个简单的后台管理系统界面&#xff0c;主要包含左侧导航栏和右侧内容区域。左侧导航栏有 logo、管理员头像、导航菜单和安全退出按钮&#xff1b;右侧内容区域包括页头、用户信息管理内容&#xff08;含搜索框和用户数据表格&#xff09;以及页…...

2025.2.8——二、Confusion1 SSTI模板注入|Jinja2模板

题目来源&#xff1a;攻防世界 Confusion1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;查看网页源码信息 step 2&#xff1a;模板注入 step 3&#xff1a;构造payload&#xff0c;验证漏洞 step 4&#xff1a;已确认为SSTI漏洞中的Jinjia2…...

Mysql 函数解析

文章目录 一、模糊匹配【like】二、CASE函数1、简单case2、搜索case3、搜索case 聚合函数 一、模糊匹配【like】 一般形式为&#xff1a;列名 [NOT] LIKE ‘%关键字%’&#xff0c;示例如下&#xff1a; like %北京%列名包括北京的字样like ‘北京%’ 列名北京开头like ‘%北…...

Docker 部署 MongoDB | 国内阿里镜像

一、简易单机版 1、镜像拉取 docker pull registry.cn-hangzhou.aliyuncs.com/farerboy/mongo:8.0.5-rc1 2、运行镜像 docker run -it --name mongodb \ -e MONGO_INITDB_ROOT_USERNAMEmongoroot \ -e MONGO_INITDB_ROOT_PASSWORDmongoroot \ -v /wwwroot/opt/docker/mong…...

加速度计信号处理

【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究&#xff08;Matlab代码实现&#xff09;_加速度计滤波器-CSDN博客 https://wenku.baidu.com/view/622d38b90f22590102020740be1e650e52eacff9.html?_wkts_1738906719916&bdQ…...