生产者延迟消息和重试机制

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
延迟消息级别

在这里插入图片描述

public PutMessageResult putMessage(final MessageExtBrokerInner msg) {

    //事务消息处理
    if (tranType == MessageSysFlag.TRANSACTION_NOT_TYPE
            || tranType == MessageSysFlag.TRANSACTION_COMMIT_TYPE) {
        // 如果是延迟消息
        if (msg.getDelayTimeLevel() > 0) {
            // 如果设置的值过大,则设置为最大延迟级别
            if (msg.getDelayTimeLevel() > this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel()) {
                msg.setDelayTimeLevel(this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel());
            }

            // 修改Topic
            topic = ScheduleMessageService.SCHEDULE_TOPIC;
            // 根据延迟级别,决定要将其投递到那个队列中
            queueId = ScheduleMessageService.delayLevel2QueueId(msg.getDelayTimeLevel());

            // 记录原始的 topic 和 队列信息
            MessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_TOPIC, msg.getTopic());
            MessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_QUEUE_ID, String.valueOf(msg.getQueueId()));
            msg.setPropertiesString(MessageDecoder.messageProperties2String(msg.getProperties()));

            // 修改topic和队列信息
            msg.setTopic(topic);
            msg.setQueueId(queueId);
        }
    }

    public static final String RMQ_SYS_SCHEDULE_TOPIC = "SCHEDULE_TOPIC_XXXX";
    
RocketMQBroker端在存储生产者写入消息时,首先将其写入CommitLog里,为了不让用户立刻就能消费到这条消息,
这里先将Topic的名称修改为SCHEDULE_TOPIC_XXXX,并且根据设置的延迟级别选择将消息投放到哪一个队列里。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整个流程;

  1. 生产者发送延迟消息到Broker里
  2. 把消息转发到SCHEDULE_TOPIC_XXXX主题下的队列中
  3. 延迟服务定期消费SCHEDULE_TOPIC_XXXX主题下的消息,到时间了就把它拿到CommitLog中
  4. 消息重新被投放到目标Topic里
  5. 消费者消费延迟消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/658579.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

静态测试---基于WorkList的活跃变量分析

本文主要用于记录在活跃变量分析实验中的报错及解决,涉及静态测试的详细原理内容较少,编译运行底层逻辑偏多。 一、实验要求 1)使用llvm基于框架实现一个基于WorkList的活跃变量分析demo。变量在某个程序点有两种状态,live 或 dea…

如何用俄语预定酒店,柯桥外贸俄语培训

-Привет, Алекс! Как твои дела? 你好,阿列克斯!你最近好吗? -Отлично! Я скоро уезжаю на 10 дней в Санкт-Петербург, но никак не могу найти там…

基于高光谱数据集的创新点实现-高斯核函数卷积神经网络

一、高光谱数据集简介 1.1 数据集简介 数据集链接在这:高光谱数据集(.mat.csv)-科研学术 数据集包含下面三个文件: 文件中包含.mat与.csv,145x145x220, 其实主要使用avirissub.csv文件,在代码上只是将mat文件转成了csv文件。具体avirissub.csv如下&am…

第二十四章多栏布局解决方案(什么是自适应?/)

什么是自适应? 指能使网页自适应显示在不同大小终端设备上新网页设计方式及技术.简单的来说自适应就是让同一个页面自动适应不同大小的设备,从而解决为不同设备提供不同版本的页面问题。 1.两列自适应 两列自适应布局是指左侧固定宽度,右…

小程序使用Canvas设置文字竖向排列

在需要使用的js页面引入js文件,传入对应参数即可 /** * 文本竖向排列 */ function drawTextVertical(context, text, x, y) {var arrText text.split();var arrWidth arrText.map(function (letter) {return 26;});var align context.textAlign;var baseline context.…

河北奥润顺达集团研究院PMO经理常江南受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 河北奥润顺达集团研究院PMO经理、研发部运营管理办负责人常江南先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“初建PMO的体系宣贯和人员培养实践总结”。大会将于6月29-30日在北京举办,敬请关注&#xf…

质量工具系列之Dependency-Track

项目开发中依赖了很多第三方开源工具,对于其版本,漏洞等因为时间或者是数量太多而无法关注到,Dependency-Track解决这些问题。 Dependency-Track 是一个开源组件分析平台,是开放网络应用安全项目(OWASP)的一…

【自动化运营】PlugLink 1.0开源版发布

什么是PlugLink? PlugLink,顾名思义,就是插件的链接。它旨在帮助个人和小微企业实现运营自动化,通过链接脚本、API、AI大模型等,实现全自动工作流程。你可以把PlugLink看作一个巨大的拼装积木,每一个插件都…

Java解析JSON并修改属性值:从JSON到JsonObject的逐层解析

哈喽,大家好,我是木头左! 在Java中,可以使用各种库来解析和操作JSON数据。其中,Gson和Jackson是两个非常流行且功能强大的库。在这篇文章中,将使用Gson库来解析给定的JSON字符串,修改operationB…

加氢站压缩液驱比例泵放大器

加氢站压缩液驱液压系统的要求是实现换向和速度控制,对液压动力机构而言,按原理可区分为开式(阀控)- 节流控制系统和闭式(泵控)- 容积控制系统: 阀控系统 – 节流调速系统:由BEUEC比…

Sui新共识协议刷新了区块链交易速度的标准

Sui是提供业界领先性能和无限水平扩展的创新Layer 1区块链,今日在官推上宣布其最新共识协议Mysticeti已成功部署到测试网。这一重大突破将Sui测试网的共识时间减少了80%,至390毫秒,同时保持协议的行业领先吞吐量。这一令人印象深刻的演示证明…

英国金融时报:波场TRON出席康奈尔大学区块链会议

近日,康奈尔区块链大会的白金赞助商波场TRON在罗斯福岛的康奈尔大学科技校区(Cornell Tech)举办多项活动,消息得到英国金融时报,费加罗报和Benzinga等权威外媒报道,这全面彰显了波场TRON的领导力。大会吸引了包括学生、学者和行业领袖等在内的 800 多名参与者,凸显了波场TRON致…

【教程】Linux部署Android安卓模拟器

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 未完成, 先简单记录下指令。 docker-android https://github.com/budtmo/docker-android 检查系统是否支持: sudo apt instal…

【ARM+Codesys案例】树莓派+Codesys软PLC方案在包装行业灌装旋盖机的应用

ARM系列支持:全志T3、RK3568、树莓派 机型定义:双工位旋盖机 旋盖机主要适用于不同规格的材质及不同规格的盖、旋(轧)盖。适用螺旋盖、防盗盖、防撞盖、压入盖等。压力可方便调整,根据瓶盖大小设置取盖位。结构紧凑、…

【Springboot】注解@JsonIgnore、@TableField、@TableId

文章目录 1.JsonIgnore2.TableField(exist false)3.TableId 1.JsonIgnore 2.TableField(exist false) 新增一个字符串字段,并且这个字段是不用到数据库查询的 3.TableId Mybatis-plus 出现 WHERE null?,此时就要加这个注解。

全球十大体育赛事API服务

体育赛事API汇总: Broadage全球橄榄球赛事数据Broadage全球棒球赛事数据Broadage全球篮球实时数据Broadage全球冰球赛事数据Broadage全球排球实时数据TennisApi全球网球赛事讯息Broadage全球足球实时数据棒球数据【纳米数据】

AACR美国癌症研究学会文献及补充文献下载的途径

美国癌症研究学会American Association for Cancer Research(AACR)创建于1907年,是世界上成立最早、规模最大的致力于全面、创新和高水准癌症研究的科学组织。其出版物包括7种正式出版的期刊(其中五种经同行评议*)和其…

C++重点基础知识汇总大全

文章目录 一些基础知识点指针和引用 一些基础知识点 1、十进制的数字比较长的时候&#xff0c;可以加方便阅读到底是几位&#xff0c;输出的时候跟不加是一样的效果 // 十进制可以加 cout << 13890324 << endl; // 13890324 // 二进制前加0b cout << 0b111…

Web前端复习二

第一章测试 选项中加粗的为答案 1.图片的边框可以通过( )设定宽度。 A.width B.height C.border D.align 2.关于超链接&#xff0c;( )属性用于规定在何处打开链接文档。 A.href . B.target C.title D.onclick 3.( )是在新窗口打开网页文档。 A _blank B_self C_…

TQSDRPI开发板教程:DDR检测

项目资源分享 链接&#xff1a;https://pan.baidu.com/s/1IIrUL7Zczb6DwCAkihylRA 提取码&#xff1a;0z0z 打开vivado2019.1创建工程 下一步 设置工程名称与地址。勾选reate…选项&#xff0c;会创建一个新的文件夹&#xff0c;项目保存在其中&#xff0c;文件夹名称与工程名…