延时任务!redis key失效监听,rabbitmq死信队列实现,线程池,任务调度==>实现超时订单/默认好评/定时考试等

2023-11-19

实现超时订单/超期默认好评等等很多常见需要用到延时任务,大概用几种做法:

  1. redis key失效监听
  2. rabbitmq死信队列
  3. 调度线程池
  4. 定时调度

一. redis key失效监听实现(推荐),注意redis.conf 放开 notify-keyspace-events Ex


/**
 *取消订单,超期默认好评等业务,考试到期自动交卷结束等
 */

@Configuration
@Slf4j
public class RedisKeyExpireListenerConfig {

    @Value("${spring.redis.database:0}")
    private String redisDatabase;
    @Autowired
    private ExamMapper examMapper;

    @Bean
    public RedisMessageListenerContainer container(RedisConnectionFactory factory) {

        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(factory);
        container.addMessageListener((message, pattern) -> handleKeyExpire(message), new PatternTopic("__keyevent@"+redisDatabase+"__:expired")); //监听16库的key失效
        return container;
    }


    
    private  void  handleKeyExpire(Message message){
        String redisKey = new String(message.getBody());
        //监听到有考试结束,修改考试状态及结束时间
        if (redisKey.startsWith(RedisConstant.EXAM_TIMEOUT)){
            String examId = redisKey.replace(RedisConstant.EXAM_TIMEOUT, "");
            int i = examMapper.examOver(examId);
            log.warn("考试超时自动提交试卷ID:{},结果:{}",examId,i);
        }
    }

}

二. rabbitmq死信队列

死信队列是rabbitmq有一个特殊属性的普通队列,spring 配置类配置好普通队列,死信队列及与各自的交换机绑定,并且普通队列配置与死信队列的绑定。业务基本流程:参考

  1. 业务消息被投入业务队列
  2. 消费者消费业务队列的消息,由于处理过程中发生异常,于是进行了nck或者reject操作(须配置手动ack)
  3. 被nck或reject的消息/超时消息由RabbitMQ投递到死信交换机中
  4. 死信交换机将消息投入相应的死信队列
  5. 死信队列的消费者消费死信消息

注意普通队列的生产者发送消息时设置超时时间: rabbitTemplate.convertAndSend("EXCHANGE", "KEY", p, 该参数设置TTL, data);

三.定时任务

如果要求延迟低而设置高频定时任务可能会导致性能问题;或频率一般,但操作的DB 表比较大也可能导致性能问题。是否通过定时任务解决需要时具体情况而定

四.调度线程池

实现最简单,但遇到宕机或重启可能丢失部分任务

 @Autowire 
 private  ScheduledThreadPoolExecutor executor;

 ...
 Future future = executor.schedule(() -> {
                    System.out.println("具体业务");
                }, 3L, TimeUnit.SECONDS);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

延时任务!redis key失效监听,rabbitmq死信队列实现,线程池,任务调度==>实现超时订单/默认好评/定时考试等 的相关文章

  • other

    other
  • Oracle环境变量配置

    情况描述 最近在配置plsql环境后 plsql总是连接不上 由于对自己的记忆力过度自信 导致这个简单的问题不能得到解决 现在记录下来作为以后的参考 一 客户端安装 官网下载orcle对应版本的客户端 然后执行安装 二 环境变量 需要配置以
  • ajax异步加载解析复杂json(集合中包含对象,对象中包含对象)数据

    1 例如后台返回的json数据如下 id 1 name 2 user name 2 age 18 id 2 name 2 user name 2 age 18 2 前台解析代码如下 var obj eval s 进行格式的转化 然后就能采用
  • gdb调试心得

    最近bug check过程中 学到不少关于gdb调用的方法 包括查看stack frame 及函数调用时的堆栈约定 总结如下 1 core文件中每个stack frame保存自己的ebp esp信息 2 ebp 8是第一个参数 ebp 12
  • 搭建符号服务器 (Windows)

    开网站 安装IIS 添加一个网站 配置好物理路径 添加MIME 扩展名为 类型为 application octet stream 即允许下载所有文件 好了 就那么简单 把pdb发布到网站中 我这里建立了一个名叫 test 的网站 物理路径
  • Switch NS 通过华硕梅林路由DNSMASQ屏蔽任天堂服务器

    好吧 我是把我的古董NS机给大气层了 今天来说下如何通过dnsmasq把任天堂的服务器给屏蔽了 虽然我还没有测试过这个屏蔽是否能够避免BAN机 作者免责声明 本文以下内容不对其有效性 安全性 可靠性负责 利用本文所提出的技术内容产生的一切正
  • Homebrew 更换国内源

    eval opt homebrew bin brew shellenv export HOMEBREW BREW GIT REMOTE https mirrors ustc edu cn brew git export HOMEBREW C
  • Checkout conflict with files: src/main/resources/jeesite.properties Checkout

    这次使用git突然出现这样的错误Checkout conflict with files src main resources jeesite properties Checkout 最后才明白在你pull新的东西的时候应该先提交到本地仓库
  • 祝您健康:抢救脑溢血患者的神奇秘方:针刺十宣穴,涌泉穴

    中风 脑出血 的抢救方法 中风 脑血管意外 是临床常见的急性病症 特别是对于中老人 更是致死致残的高发病 脑溢血抢救放血急救法是对中风最有效的一种急救方法 如能正确掌握和及时施救 将能很大程度地减少中风对人体的伤害 我想 对于每个血压有点高
  • thinkpad e480 f1键常亮没有声音

    我这里说的电脑指的是 ThinkPad E480 可能你会发现自己的电脑莫名其妙的没有声音了 此时你的F1键可能亮 也可能不亮 但你如果再关机重启 那么你会发现 你的F1键 极大的可能是不亮的 有很多人说是Fn f1键 但这不是根本 关键在
  • 我正在建造一座大教堂

    有个人经过一个建筑工地 问那里的石匠们在干什么 三个石匠有三个不同的回答 第一个石匠回答 我在做养家糊口的事 混口饭吃 第二个石匠回答 我在做整个国家最出色的石匠工作 第三个石匠回答 我正在建造一座大教堂 赵日磊点评 三个石匠的回答给出了三
  • ArcGis10.2详细安装步骤

    目录 1 安装License Manager10 2 2 复制试用文件 3 安装ArcGis Desktop10 2中文版 4 更新本地许可 提供arcgis下载地址 暂时评论区留邮箱吧 下载之后会得到以下3个目录 按顺序进行操作或者安装
  • 获取股票的数据

    if code is 6xxxxxx then add 0 as prefix Otherewise use 1 as prefix for example 600149 it will be 0600149 000001 it will
  • 什么是集线器

    集线器 英文名又称Hub 在OSI模型中属于数据链路层 价格便宜是它最大的优势 但由于集线器属于共享型设备 导致了在繁重的网络中 效率变得十分低下 所以我们在中 大型的网络中看不到集线器的身影 如今的集线器普遍采用全双工模式 市场上常见的集
  • 思维的特点和缺陷

    人类总是喜欢歌颂自己的大脑 比如 思想的威力 逻辑的威力 数学的威力 数学来自于思考 科学的威力 科学来源于思考 还有 意识 这个 人类与动物最大的区别 i blah blah 不过 几乎没有人关心过这种想法究竟来自于人体的哪个器官 心理学
  • 【Docker】ubuntu20.04 X86机器搭建NVIDIA ARM64 TX2的Docker镜像

    文章目录 1 设置ubuntu为清华源 1 1 备份源文件 1 2 替换清华源 1 3 更新清华源 2 Ubuntu Docker 安装 3 安装qemu 4 安装Nvidia TX2 Docker镜像 5 如何使用TX2容器 6 参考资料
  • cpu三大架构 numa smp mpp

    系统的性能很大程度上依赖于cpu 硬件架构的支持 从系统架构来看 目前的商用服务器大体可以分为三类 即 对称多处理器结构 SMP Symmetric Multi Processor 非一致存储访问结构 NUMA Non Uniform Me
  • Type Incompatible operand types String and int

    今天eclipse包了一个错误 意思就是Description Resource Path Location Type Incompatible operand types String an 但是昨天还没有错误为什么那 最后找了好久发现不
  • 延时任务!redis key失效监听,rabbitmq死信队列实现,线程池,任务调度==>实现超时订单/默认好评/定时考试等

    实现超时订单 超期默认好评等等很多常见需要用到延时任务 大概用几种做法 redis key失效监听 rabbitmq死信队列 调度线程池 定时调度 一 redis key失效监听实现 推荐 注意redis conf 放开 notify ke
  • 为 SQL Server 站点数据库服务器配置 SPN

    如何为 SQL Server 站点数据库服务器配置 SPN 主题上次更新时间 2008 年 1 月 使用 SQL Server 计算机的本地系统帐户运行 SQL Server 服务不是 SQL Server 最佳方案 为了最安全地运行 SQ

随机推荐

  • 常量池垃圾回收:判断类的存活

    方法区中的常量池也需要进行垃圾回收 主要回收对象是废弃的常量和无用的类 其中 判断类的存活需要同时满足以下3个条件 1 该类所有的实例已经被回收 即Java堆中已经不存在任何该类的实例 2 加载该类的ClassLoader已经被回收 3 该
  • jquery实现checkbox全选、取消全选

  • Mac用自带软件QuickTime Player进行录屏

    Mac电脑用自带软件QuickTime Player进行录屏的教程 几步就可以学会 挺简单的 1 首先 找到并打开QuickTime Player软件 可以鼠标右键这个图标 选择 选项 在程序坞中保留 这样 软件就固定在了Dock栏 方便以
  • 一串有趣的代码

    啊哈 已经来学校四五天了 日子还不错 前些天遇见一段蛮有趣的 代码段 在 窗口输出常量 给大家分享分享 称的上是程序员的一点小浪漫吧 Protected Sub Button1 Click sender As Object e As Eve
  • 人体姿态估计数据集

    数据集 1 PASCAL VOC challenge voc挑战在2005年至2012年间展开 该数据集中有20个分类 该数据集包含11530张用于训练和验证的图像 以下是数据集中20个分类 人 鸟 猫 牛 狗 马 羊 飞机 自行车 船 巴
  • 打包工具 Inno Setup 介绍

    Inno Setup 详解中文资料 其一 使用教程 一 Inno Setup 是什么 InnoSetup 是一个免费的 Windows 安装程序制作软件 第一次发表是在 1997 年 Inno Setup 今天在功能设置和稳定性上的竞争力可
  • CPU缓存一致性动态图

    https www scss tcd ie Jeremy Jones VivioJS caches MESI htm
  • mysql常用工具

    1 mysql 该mysql不是指mysql服务 而是指mysql的客户端工具 语法 mysql options database 参数 u user name 指定用户名 p password name 指定密码 h host name
  • js中精确判断对象类型--关于typeof 和Object.prototype.toString方法的区别

    在javascript中可以使用typeof来判断数据类型 但typeof只能判断区分基本类型 即number string boolean undefinded和object这5种
  • STM32定时器详解

    目录 前言 一 定时器基本介绍 1 STM32定时器 2 通用定时器功能和特点 3 计数器模式 4 定时器工作原理 a 定时器框图 b 时钟产生器部分 c 时基单元 d 输入捕获通道 e 输出比较通道 PWM 二 定时器中断应用 1 内部时
  • 【MySQL】表的基本操作

    1 数据类型 1 1 数值类型 数据类型 大小 说明 bit M M指定位数 默认为1 二进制 M范围从1到64 存储数值范围从0到2 M 1 tinyint 1字节 smallint 2字节 int 4字节 bigint 8字节 floa
  • Flutter沉浸式状态栏

    在Android 这入口activity 添加如下代码即可 Android 4 4 默认支持设置状态栏颜色 if Build VERSION SDK INT gt Build VERSION CODES LOLLIPOP API gt 21
  • MYSQL出错代码及出错信息对照

    MYSQL出错代码及出错信息对照 1005 创建表失败 1006 创建数据库失败 1007 数据库已存在 创建数据库失败 1008 数据库不存在 删除数据库失败 1009 不能删除数据库文件导致删除数据库失败 1010 不能删除数据目录导致
  • maven命令行以及配置整理

    mvn的相关概念 maven构建生命周期 mvn validate 验证 mvn compile 编译 mvn test 测试 mvn package 打包 mvn verify 检查 mvn install 安装 mvn deploy 部
  • python识别图片上的文字_Python如何识别图片中的文字 【转】

    Python如何识别图片中的文字 这里给个案例并附上详细步骤 模块包的安装 1 安装PIL pip install Pillow 2 安装pytesser3 pip install pytesser3 3 安装pytesseract pip
  • SpringBoot中通过AOP进行全局事务管理

    SpringBoot中使用AOP进行全局事务管理 不废话 直接上干货 实现步骤如下 第一步 pom文件中添加依赖
  • 软件工程基础复习_7

    第7章软件测试 软件验证是通过检查和提供客观证据表明软件已经满足规定的需求 是确保软件质量和降低软件成本的重要手段 进行软件验证的方式有两种测试和证明 软件测试又可以分为两类 静态测试和动态测试 静态测试又称评审 是对软件进行的一种分析和检
  • 前端搜索JS库 Elasticlunr.js

    有Github账号的小伙伴们 帮忙点赞啦 Star 本人写了一个JS的离线搜索库 支持Field search 采用BM25模型进行Ranking Ranking的算法和Elasticsearch一样的 效果比lunr js有很高提升 希望
  • 期权分仓开户资金是否安全?具体保障措施有哪些?

    网上关于期权分仓系统的真假一直都没有定论 两方人的争论也让很多没有接触过期权分仓系统的人摸不着头脑 那么期权分仓靠谱吗 资金在里面安全吗 下文为大家科普期权分仓开户资金是否安全 具体保障措施有哪些 一 期权分仓开户资金的安全性是一个重要的问
  • 延时任务!redis key失效监听,rabbitmq死信队列实现,线程池,任务调度==>实现超时订单/默认好评/定时考试等

    实现超时订单 超期默认好评等等很多常见需要用到延时任务 大概用几种做法 redis key失效监听 rabbitmq死信队列 调度线程池 定时调度 一 redis key失效监听实现 推荐 注意redis conf 放开 notify ke