(一)延时任务篇——延时任务的几种实现方式概述
前言
延时任务是我们在项目开发中经常遇到的场景,例如订单超时30分钟自动取消,邮件5分钟后通知等等,对于这样的应用场景,我们又该如何应对呢,尤其是在微服务环境下,如何保证我们的延迟任务并发问题以及数据安全等等问题。本节内容作者会根据以往的项目开发经验,介绍几种延时任务的实现方案。
正文
方案一:定时任务+db数据库
- 方案说明:以订单30分钟超时支付,取消订单为例,用户下单后在db数据库记录订单的下单时间,开启一个定时轮询任务,比如每5分钟扫描一次数据库的数据,查询下单时间加上30分钟小于当前时间并且还未支付的订单数据,根据查询结果,将查询到的数据做关单的处理。
- 需要注意的问题:如果是微服务项目,要使用分布式任务xxl-job等中间件实现定时任务,如果使用的springtask等要加分布式锁,避免任务在多个服务上重复执行;任务执行失败,最好有重试机制,保证成功率。
- 优缺点:优点是实现简单,基本不用引入第三方的中间件。缺点是性能低下,耗费系统资源,没有用来处理的业务数据,定时任务会空跑。
方案二:使用MQ消息中间件
- 方案说明:使用MQ消息中间件实现,目前已知的支持延时任务的消息中间件有rabbitmq、rocketmq等,其底层基本都是通过延时队列实现。需要注意的是rabbitmq的延迟队列需要安装插件支持,rocketmq只支持固定时间等级的延迟任务。只要将延迟消息发送到mq消息中间件中,开启客户端的监听,监听延迟队列的消息,从而消费消息。
- 需要注意的问题:增加消息中间件会增加系统的复杂度,同时要保证消息中间件的高可用。
- 优缺点:天然支持高并发,性能好,实现了业务解耦。缺点是增加了系统的复杂性。
方案三:使用redis实现
- 方式一:使用redis的key过期监听机制
①实现原理:通过开启redis的key过期监听机制,在redis配置文件中设置notify-keyspace-events Ex,开启key过期的事件监听机制,当key过期后,会通过发布订阅机制发布key过期的消息,客户端通过继承实现KeyExpirationEventMessageListener监听器,实现key过期的消息监听。
②实现方案:使用redis的String数据类型,以订单id为key并设置过期时间,当key过期后,通过监听到key的过期事件,然后在处理具体的业务数据。
③问题:官方不推荐使用,安全级别低,可能会存在数据丢失的问题。
- 方式二:使用zset数据结构实现
①实现方案:使用redis的zset数据结构,以订单id为key,score的值为定单过期的时间戳,通过定时任务查询前n条数据,如果数据过期,则处理对应的关单业务,并将处理后的key删除。
②优缺点:读取缓存数据,性能优秀,虽然也存在资源的浪费。增加了系统的复杂性。
- 方式三:使用redisson的延迟队列实现
①通过redisson的延迟队列RDelayedQueue实现,其底层也主要是通过redis的zset数据结构加redis的订阅发布机制实现,集成更加方便,使用简单,是redis方式实现延迟队列的最佳实践。
结语
具体使用哪种方案,要根据项目的实际情况而定。关于方案的具体实现,请持续关注作者的更新内容,关注我,不迷路。本节内容到这里就结束了,我们下期见。。。。。。
相关文章:
(一)延时任务篇——延时任务的几种实现方式概述
前言 延时任务是我们在项目开发中经常遇到的场景,例如订单超时30分钟自动取消,邮件5分钟后通知等等,对于这样的应用场景,我们又该如何应对呢,尤其是在微服务环境下,如何保证我们的延迟任务并发问题以及数据…...
每天五分钟计算机视觉:目标检测模型从RCNN到Fast R-CNN的进化
本文重点 前面的课程中,我们学习了RCNN算法,但是RCNN算法有些慢,然后又有了基于RCNN的Fast-RCNN,Fast R-CNN是一种深度学习模型,主要用于目标检测任务,尤其在图像中物体的识别和定位方面表现出色。它是R-CNN系列算法的一个重要改进版本,旨在解决R-CNN中计算量大、速度慢…...
环境变量配置文件中两种路径添加方式
环境变量配置文件中两种路径添加方式 文章目录 环境变量配置文件中两种路径添加方式代码示例区别和作用 代码示例 export HBASE_HOME/opt/software/hbase-2.3.5 export PATH$PATH:$HBASE_HOME/binexport SPARK_HOME/opt/software/spark-3.1.2 export PATH$SPARK_HOME/bin:$PAT…...
开放系统互连安全体系结构学习笔记总结
开篇 本文是《网络安全 技术与实践》一书中序章中“开放系统互连安全体系结构”这一块的笔记总结。 定义 开放系统互连(Open System Interconnection, OSI)安全体系结构定义了必需的安全服务、安全机制和技术管理,以及它们在系统上的合理部署…...
linux搭建redis cluster集群
集群介绍: Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。 Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继…...
瀚高数据库初级考试认证
pg_dumpall可以转储全局角色和表空间信息 单选题2分 A. 是 B. 否 回答正确(2分) 答案: A 解析:pg_dumpall备份一个给定集簇中的每一个数据库,并且也保留了集簇范围的数据,如角色和表空间定义。 2. 自定义文件格式必须与pg_restore…...
【java基础】spring中使用到的设计模式
Spring框架在其设计和实现中使用了多种设计模式,这些模式帮助Spring框架保持灵活性、可扩展性和易于集成的特点。以下是一些在Spring框架中常见和重要的设计模式: 工厂模式(Factory Pattern) Spring的核心容器使用了工厂模式&…...
浅层深度学习的概述
在人工智能和机器学习的领域中,“深度学习”已成为一个热门话题。该术语通常与多层神经网络和复杂模型联系在一起,然而,“浅层深度学习”是指那些较为简单而且通常只有一两个隐藏层的神经网络。这种模型在许多任务中表现出色,同时…...
如何找到最快解析速度的DNS
如何找到最快解析速度的DNS DNS,即域名系统(Domain Name System),是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用记住能够被机器直接读取的IP数串。 在浏览网页时,我们通常使用域名,而不是IP地址。当域名在…...
【YashanDB知识库】数据库使用shutdown immediate无响应导致coredump
【标题】数据库使用shutdown immediate无响应导致coredump 【问题分类】数据库维护 【关键词】YashanDB, shutdown immediate, coredump 【问题描述】执行shutdown immediate后,数据库一直没有退出,在操作系统层面强制停止数据库进程时发生coredump。…...
web前端 React 框架面试200题(一)
面试题 1. 简述什么是React ( 概念 )? 参考回答: 1、React是Facebook开发的一款JS库。 2、React一般被用来作为MVC中的V层,它不依赖其他任何的库,因此开发中,可以与任何其他的库集成使用&…...
【前端】JavaScript入门及实战91-95
文章目录 91 DOM92 事件93 文档的加载94 DOM查询(1)95 图片切换的练习 91 DOM <!DOCTYPE html> <html> <head> <title></title> <meta charset"utf-8"><style> </style> </head> <body><button id&…...
vue3在元素上绑定自定义事件弹出虚拟键盘
最近开发中遇到一个需求: 焊接机器人的屏幕上集成web前端网页, 但是没有接入键盘。这就需要web端开发一个虚拟键盘,在网上找个很多虚拟键盘没有特别适合,索性自己写个简单的 图片: 代码: (代码可能比较垃圾冗余,也没时间优化,凑合看吧) 第一步:创建键盘组件 为了方便使用…...
VMware 上安装 CentOS 7 教程 (包含网络设置)
**建议先看一些我安装VMware的教程,有些网络配置需要做一下 1.打开VMware,创建虚拟机 2.勾选自定义,点击下一步 3.点击下一步 4.勾选“稍后安装操作系统”,点击下一步 5.勾选linux,勾选centos7,点击下一步…...
算法 day4 【双指针、快慢指针、环形链表】链表下
⚡刷题计划day4继续,可以点个免费的赞哦~ 下一期将会开启哈希表刷题专题,往期可看专栏,关注不迷路, 您的支持是我的最大动力🌹~ 目录 ⚡刷题计划day4继续,可以点个免费的赞哦~ 下一期将会开启哈希表刷题…...
智能音箱的工作原理
智能音箱的工作原理主要涉及到硬件和软件两个层面的协同工作,以及多个关键技术环节的配合。以下是对智能音箱工作原理的详细解析: 一、硬件层面 智能音箱的硬件组成通常包括主控芯片、麦克风阵列、扬声器、Wi-Fi模块和电源等部分。 主控芯片࿱…...
国际金融入门:国际收支与平衡表解析
在全球化的经济体系中,国际金融已成为我们日常生活不可或缺的一部分。了解国际金融的基础知识,可以帮助我们更好地理解世界经济的动态和趋势。今天,我们将深入探讨国际收支及其平衡表,以及它们是如何影响国家经济。 国际收支&…...
Modbus转BACnet/IP网关的技术实现与应用
引言 随着智能建筑和工业自动化的快速发展,不同通信协议之间的数据交换也变得日益重要。Modbus和BACnet/IP是两种广泛应用于自动化领域的通信协议,Modbus以其简单性和灵活性被广泛用于工业自动化,而BACnet/IP则在楼宇自动化系统中占据主导地…...
数据库连接断开后,DBAPI的数据源如何自动重连
现象 在使用DBAPI的过程中,如果网络抖动导致数据库连接不上,发现DBAPI的数据源不能重连,必须重启DBAPI才能连上数据库 解决办法 在数据源的连接池参数配置druid.breakAfterAcquireFailurefalse注意在企业版的4.1.1及以上版本才可以配置连接…...
Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)
Microsoft 365 Office BusinessPro LTSC 2024是一款专为商业用户设计的办公软件套件,它集成了Word、Excel、PowerPoint等核心应用,并特别包含了Microsoft Teams这一强大的协作工具。Teams将聊天、会议、文件共享、任务管理等功能整合到一个平台上&#x…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
