首页 > 其他分享 >RocketMQ定时/延时消息

RocketMQ定时/延时消息

时间:2024-04-25 16:55:25浏览次数:17  
标签:消费 RocketMQ 延时 定时 服务端 消息

什么是延时消息

当消息写入到Broker后,在指定的时长后才可被消费处理的消息,称为延时消息。
采用RocketMQ的延时消息可以实现定时任务的功能,而无需使用定时器。典型的应用场景是,电商交
易中超时未支付关闭订单的场景,12306平台订票超时未支付取消订票的场景。

在电商平台中,订单创建时会发送一条延迟消息。这条消息将会在30分钟后投递给后台业务系
统(Consumer),后台业务系统收到该消息后会判断对应的订单是否已经完成支付。如果未完
成,则取消订单,将商品再次放回到库存;如果完成支付,则忽略。
在12306平台中,车票预订成功后就会发送一条延迟消息。这条消息将会在45分钟后投递给后台
业务系统(Consumer),后台业务系统收到该消息后会判断对应的订单是否已经完成支付。如
果未完成,则取消预订,将车票再次放回到票池;如果完成支付,则忽略。

延时消息生命周期

image

  • 初始化:消息被生产者构建并完成初始化,待发送到服务端的状态。

  • 定时中:消息被发送到服务端,和普通消息不同的是,服务端不会直接构建消息索引,而是会将定时消息单独存储在定时存储系统中,等待定时时刻到达。

  • 待消费:定时时刻到达后,服务端将消息重新写入普通存储引擎,对下游消费者可见,等待消费者消费的状态。

  • 消费中:消息被消费者获取,并按照消费者本地的业务逻辑进行处理的过程。 此时服务端会等待消费者完成消费并提交消费结果,如果一定时间后没有收到消费者的响应,Apache RocketMQ会对消息进行重试处理。

  • 消费提交:消费者完成消费处理,并向服务端提交消费结果,服务端标记当前消息已经被处理(包括消费成功和失败)。 Apache RocketMQ 默认支持保留所有消息,此时消息数据并不会立即被删除,只是逻辑标记已消费。消息在保存时间到期或存储空间不足被删除前,消费者仍然可以回溯消息重新消费。

  • 消息删除:Apache RocketMQ按照消息保存机制滚动清理最早的消息数据,将消息从物理文件中删除。

使用限制

消息类型一致性

定时消息仅支持在 MessageType为Delay 的主题内使用,即定时消息只能发送至类型为定时消息的主题中,发送的消息的类型必须和主题的类型一致。

定时精度约束

Apache RocketMQ 定时消息的定时时长参数精确到毫秒级,但是默认精度为1000ms,即定时消息为秒级精度。

Apache RocketMQ 定时消息的状态支持持久化存储,系统由于故障重启后,仍支持按照原来设置的定时时间触发消息投递。若存储系统异常重启,可能会导致定时消息投递出现一定延迟。

标签:消费,RocketMQ,延时,定时,服务端,消息
From: https://www.cnblogs.com/zuitaiping/p/18158071

相关文章

  • RocketMQ普通消息
    消息发送分类同步发送消息同步发送消息是指,Producer发出⼀条消息后,会在收到MQ返回的ACK之后才发下⼀条消息。该方式的消息可靠性最高,但消息发送效率太低。在mq集群中,也是要等到所有的从机都复制了消息以后才会返回,所以针对重要的消息可以选择这种方式。异步发送消息异步发......
  • rocketMQ安装教程
     文章地址:https://blog.csdn.net/qq_43600166/article/details/136187969文章目录前言一、rocketMQ安装教程二、rocketmq-console可视化界面 前言本章节将介绍如何在docker环境下安装rocketmq以及rocketmq-console可视化界面一、rocketMQ安装教程在安装之前请保......
  • RocketMQ 之 IoT 消息解析:物联网需要什么样的消息技术?
    前言:从初代开源消息队列崛起,到PC互联网、移动互联网爆发式发展,再到如今IoT、云计算、云原生引领了新的技术趋势,消息中间件的发展已经走过了30多个年头。目前,消息中间件在国内许多行业的关键应用中扮演着至关重要的角色。随着数字化转型的深入,客户在使用消息技术的过程中往......
  • van-dialog 点击confirm确定时如果不满足条件则不允许关闭
    <van-dialogv-model="showDialog"@confirm="confirmFn"@cancel="showDialog=false"title="添加故障现象"show-cancel-button:before-close="onBeforeClose">......
  • RocketMQ详解
    1.RocketMQ基本概念1.1主题-Topic主题:是RocketMQ中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。主题是一个逻辑概念,并不是实际的消息容器。1.2队列-MessageQueue队列:是RocketMQ中消息存储和传输的实际容器,也是RocketMQ消息的最小存储单元。主题都是由多......
  • springboot 统计接口耗时及指定时间接口访问次数
     1.使用AOP在不改变原有方法的基础上对接口方法增强,引入依赖<!--引入AOP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!--引入Redis依赖--><depen......
  • ORACLE定时器,执行周期设定
    对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作。但是,Oracle定时器Job时间的处理上,千变万化,今天我把比较常用写法汇总如下:在总结之前,先把Job的参数一一说明一下:job参数是由Su......
  • linux定时任务配置
    1.查看是否安装了crontabservicecrondstatus2.创建要定时执行的脚本test.sh(注:所有的路径都写绝对路径,包括输出日志的路径,否则执行可能会有问题)#!/bin/bashecho"大家好">>/home/kavins.logecho"执行时间为:`date`">>/home/kavins.log3.配置定时任务:crontab-e......
  • 【Java定时任务】浅谈CronTrigger的用法和在线Cron表达式生成网址
    1.CronTrigger的作用CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表。CronTrigger,你可以指定触发的时间表如“每星期五中午”,或“每个工作日9:30时”,甚至“每5分钟一班9:00和10:00逢星期一上午,星期三......
  • RocketMQ实践
    RocketMQ的安装下载安装ApacheRocketMQ​这里以在Linux环境为例,介绍RocketMQ安装过程。解压下载的源码包并编译构建二进制可执行文件$mvn-Prelease-all-DskipTests-Dspotbugs.skip=truecleaninstall-U$cddistribution/target/rocketmq-4.9.4/rocketmq-4.9.4启动N......