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

(一)延时任务篇——延时任务的几种实现方式概述

前言

延时任务是我们在项目开发中经常遇到的场景,例如订单超时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的教程&#xff0c;有些网络配置需要做一下 1.打开VMware&#xff0c;创建虚拟机 2.勾选自定义&#xff0c;点击下一步 3.点击下一步 4.勾选“稍后安装操作系统”&#xff0c;点击下一步 5.勾选linux&#xff0c;勾选centos7&#xff0c;点击下一步…...

算法 day4 【双指针、快慢指针、环形链表】链表下

⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题专题&#xff0c;往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 ⚡刷题计划day4继续&#xff0c;可以点个免费的赞哦~ 下一期将会开启哈希表刷题…...

智能音箱的工作原理

智能音箱的工作原理主要涉及到硬件和软件两个层面的协同工作&#xff0c;以及多个关键技术环节的配合。以下是对智能音箱工作原理的详细解析&#xff1a; 一、硬件层面 智能音箱的硬件组成通常包括主控芯片、麦克风阵列、扬声器、Wi-Fi模块和电源等部分。 主控芯片&#xff1…...

国际金融入门:国际收支与平衡表解析

在全球化的经济体系中&#xff0c;国际金融已成为我们日常生活不可或缺的一部分。了解国际金融的基础知识&#xff0c;可以帮助我们更好地理解世界经济的动态和趋势。今天&#xff0c;我们将深入探讨国际收支及其平衡表&#xff0c;以及它们是如何影响国家经济。 国际收支&…...

Modbus转BACnet/IP网关的技术实现与应用

引言 随着智能建筑和工业自动化的快速发展&#xff0c;不同通信协议之间的数据交换也变得日益重要。Modbus和BACnet/IP是两种广泛应用于自动化领域的通信协议&#xff0c;Modbus以其简单性和灵活性被广泛用于工业自动化&#xff0c;而BACnet/IP则在楼宇自动化系统中占据主导地…...

数据库连接断开后,DBAPI的数据源如何自动重连

现象 在使用DBAPI的过程中&#xff0c;如果网络抖动导致数据库连接不上&#xff0c;发现DBAPI的数据源不能重连&#xff0c;必须重启DBAPI才能连上数据库 解决办法 在数据源的连接池参数配置druid.breakAfterAcquireFailurefalse注意在企业版的4.1.1及以上版本才可以配置连接…...

Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)

Microsoft 365 Office BusinessPro LTSC 2024是一款专为商业用户设计的办公软件套件&#xff0c;它集成了Word、Excel、PowerPoint等核心应用&#xff0c;并特别包含了Microsoft Teams这一强大的协作工具。Teams将聊天、会议、文件共享、任务管理等功能整合到一个平台上&#x…...

应用层缓存的庖丁解牛

“应用层缓存”常被误解为“加个 Redis 那么简单”或“为了快而快”。 但本质上&#xff0c;应用层缓存是用“空间”换“时间”&#xff0c;用“一致性风险”换“系统吞吐量”的终极权衡艺术。 它是数据库&#xff08;慢、稳、强一致&#xff09;与用户&#xff08;快、急、高并…...

Curated Programming Resources的未来发展:AI时代编程学习资源的新趋势

Curated Programming Resources的未来发展&#xff1a;AI时代编程学习资源的新趋势 【免费下载链接】curated-programming-resources A curated list of resources for learning programming. 项目地址: https://gitcode.com/gh_mirrors/cu/curated-programming-resources …...

Raspotify多用户环境配置终极指南:在家庭网络中共享Spotify音乐服务

Raspotify多用户环境配置终极指南&#xff1a;在家庭网络中共享Spotify音乐服务 【免费下载链接】raspotify A Spotify Connect client that mostly Just Works™ 项目地址: https://gitcode.com/gh_mirrors/ra/raspotify 想要在家庭网络中打造一个完美的音乐共享系统吗…...

国密SM4算法在Web与Java应用中的跨平台加解密实战

1. 国密SM4算法简介与应用场景 国密SM4算法是我国自主设计的分组对称加密算法&#xff0c;于2012年成为国家密码行业标准&#xff08;GM/T 0002-2012&#xff09;。作为替换国际算法&#xff08;如AES&#xff09;的重要选择&#xff0c;SM4在金融、政务、物联网等领域得到广泛…...

InternGPT多模态对话实战:如何用Husky模型实现93.89% GPT-4质量

InternGPT多模态对话实战&#xff1a;如何用Husky模型实现93.89% GPT-4质量 【免费下载链接】InternGPT InternGPT (iGPT) is an open source demo platform where you can easily showcase your AI models. Now it supports DragGAN, ChatGPT, ImageBind, multimodal chat lik…...

从拦截到免疫:PKCE如何重塑OAuth授权码流程的安全防线

1. 授权码拦截攻击&#xff1a;OAuth的致命弱点 想象一下这样的场景&#xff1a;你在手机上打开一个看起来很正常的天气应用&#xff0c;点击"使用微信登录"按钮后&#xff0c;系统跳转到微信授权页面。你输入账号密码完成授权&#xff0c;突然发现自己的微信聊天记录…...

OpenClaw+GLM-4.7-Flash:3步实现自动化邮件处理

OpenClawGLM-4.7-Flash&#xff1a;3步实现自动化邮件处理 1. 为什么需要自动化邮件处理&#xff1f; 每天早晨打开邮箱&#xff0c;看到堆积如山的未读邮件时&#xff0c;那种窒息感我太熟悉了。作为技术团队的接口人&#xff0c;我的邮箱常年保持着200未读邮件的状态——有…...

【极简监控】告别重度存储!用 InMemoryMetricsCollector 搞定 99% 的单体应用Metrics排错

文章目录前言破局&#xff1a;断舍离&#xff0c;只关注“最近半小时”极简利器&#xff1a;InMemoryMetricsCollector 的设计哲学它是如何工作的&#xff1f;注入灵魂&#xff1a;结合 AI 的智能可视化结语与延伸相关前言 做系统监控这么多年下来&#xff0c;我们团队常常在反…...

springboot-vue+nodejs 的学生请假销假管理系统

目录技术选型与架构设计系统模块划分审批流程实现销假与统计功能系统集成与部署安全与性能优化项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 后端采用SpringBoot框架&#xff0c;提供RESTful API接口&…...

GLM-4v-9b开源镜像实操手册:transformers/vLLM/llama.cpp三端调用

GLM-4v-9b开源镜像实操手册&#xff1a;transformers/vLLM/llama.cpp三端调用 1. 开篇&#xff1a;认识这个强大的多模态模型 今天给大家介绍一个特别实用的AI模型——GLM-4v-9b&#xff0c;这是一个能同时看懂图片和文字的多模态模型。想象一下&#xff0c;你给它一张图片&a…...