游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

RocketMQ消息集成多类型业务消息定时消息

  引言
  ApacheRocketMQ诞生至今,历经十余年大规模业务稳定性打磨,服务了100阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案,RocketMQ从创建之初就一直专注于业务集成领域的异步通信能力构建。
  本篇将继续业务消息集成的场景,从使用场景、应用案例、功能原理以及最佳实践等角度介绍RocketMQ的定时消息功能。
  点击链接,查看直播讲解:https:yqh。aliyun。comlivedetail29063概念:什么是定时消息
  在业务消息集成场景中,定时消息是,生产者将一条消息发送到消息队列后并不期望这条消息马上会被消费者消费到,而是期望到了指定的时间,消费者才可以消费到。
  相似地,延迟消息其实是对于定时消息的另外一种解释,指的是生产者期望消息延迟一定时间,消费者才可以消费到。可以理解为定时到当前时间加上一定的延迟时间。
  对比一下定时消息和普通消息的流程。普通消息,可以粗略的分为消息发送,消息存储和消息消费三个过程。当一条消息发送到Topic之后,那么这条消息就可以马上处于等待消费者消费的状态了。
  而对于定时延时消息来说,其可以理解为在普通消息的基础上叠加了定时投递到消费者的特性。生产者发送了一条定时消息之后,消息并不会马上进入用户真正的Topic里面,而是会被RocketMQ暂存到一个系统Topic里面,当到了设定的时间之后,RocketMQ才会将这条消息投递到真正的Topic里面,让消费者可以消费到。
  场景:为什么需要使用定时消息
  在分布式定时调度触发、任务超时处理等场景,需要实现精准、可靠的定时事件触发。往往这类定时事件触发都会存在以下诉求:高性能吞吐:需要大量事件触发,不能有性能瓶颈。高可靠可重试:不能丢失事件触发。分布式可扩展:定时调度不能是单机系统,需要能够均衡的调度到多个服务负载。
  传统的定时调度方案,往往基于数据库的任务表扫描机制来实现。大概的思路就是将需要定时触发的任务放到数据库,然后微服务应用定时触发扫描数据库的操作,实现任务捞取处理。
  这类方案虽然可以实现定时调度,但往往存在很多不足之处:重复扫描:在分布式微服务架构下,每个微服务节点都需要去扫描数据库,带来大量冗余的任务处理,需要做去重处理。定时间隔不准确:基于定时扫描的机制无法实现任意时间精度的延时调度。横向扩展性差:为规避重复扫描的问题,数据库扫表的方案里往往会按照服务节点拆分表,但每个数据表只能被单节点处理,这样会产生性能瓶颈。
  在这类定时调度类场景中,使用RocketMQ的定时消息可以简化定时调度任务的开发逻辑,实现高性能、可扩展、高可靠的定时触发能力。精度高、开发门槛低:基于消息通知方式不存在定时阶梯间隔。可以轻松实现任意精度事件触发,无需业务去重。高性能可扩展:传统的数据库扫描方式较为复杂,需要频繁调用接口扫描,容易产生性能瓶颈。消息队列RocketMQ版的定时消息具有高并发和水平扩展的能力。
  案例:使用定时消息实现金融支付超时需求
  利用定时消息可以实现在一定的时间之后才进行某些操作而业务系统不用管理定时的状态。下面介绍一个典型的案例场景:金融支付超时。现在有一个订单系统,希望在用户下单30分钟后检查用户的订单状态,如果用户还没有支付,那么就自动取消这笔订单。
  基于RocketMQ定时消息,我们可以在用户下单之后发送一条定时到30分钟之后的定时消息。同时,我们可以使用将订单ID设置为MessageKey。当30分钟之后,订单系统收到消息之后,就可以通过订单ID检查订单的状态。如果用户超时未支付,那么就自动的将这笔订单关闭。原理:RocketMQ定时消息如何实现
  固定间隔定时消息
  如前文介绍,定时消息的核心是如何在特定的时间把处于系统定时Topic里面的消息转移到用户的Topic里面去。
  ApacheRocketMQ4。x的版本的定时消息是先将定时消息放到按照DelayLevel放到SCHEDULETOPICXXXX这个系统的不同Queue里面,然后为每一个Queue启动一个定时任务,定时的拉取消息并将到了时间的消息转投到用户的Topic里面去。这样虽然实现简单,但也导致只能支持特定DelayLevel的定时消息。
  当下,支持定时到任意秒级时间的定时消息的实现的pr提出到了社区,下面简单的介绍一下其基本的实现原理。
  时间轮算法
  在介绍具体的实现原理之前,先介绍一下经典的时间轮算法,这是定时消息实现的核心算法。
  如上所示,这是一个一圈定时为7秒的时间轮,定时的最小精度的为秒。同时,时间轮上面会有一个指向当前时间的指针,其会定时的移向下一个刻度。
  现在我们想定时到1秒以后,那么就将数据放到1这个刻度里面,同时如果有多个数据需要定时到同一个时间,
  那么会以链表的方式添加到后面。当时间轮转到1这个刻度之后,就会将其读取并从链表出队。那如果想定到超过时间轮一圈的时间怎么处理呢?例如我们想定时到14秒,由于一圈的时间是7秒,那么我们将其放在6这个刻度里面。当第一次时间轮转到6时,发现当前时间小于期望的时间,那么忽略这条数据。当第二次时间轮转到6时,这个时候就会发现已经到了我们期望的14秒了。
  任意秒级定时消息
  在RocketMQ中,使用TimerWheel对于时间轮进行描述和存储,同时使用一个AppendOnly的TimerLog记录时间轮上面每一个刻度所对应的所有的消息。
  TimerLog记录了一条定时消息的一些重要的元数据,用于后面定时的时间到了之后,将消息转移到用户的Topic里面去。其中几个重要的属性如下:
  对于TimerWheel来说,可以抽象的认为是一个定长的数组,数组中的每一格代表时间轮上面的一个刻度。TimerWheel的一个刻度拥有以下属性。
  TimerWheel和TimerLog直接的关系如下图所示:
  TimerWheel中的每一格代表着一个时间刻度,同时会有一个firstPos指向这个刻度下所有定时消息的首条TimerLog记录的地址,一个lastPos指向这个刻度下所有定时消息最后一条TimerLog的记录的地址。并且,对于所处于同一个刻度的的消息,其TimerLog会通过prevPos串联成一个链表。
  当需要新增一条记录的时候,例如现在我们要新增一个14。那么就将新记录的prevPos指向当前的lastPos,即13,然后修改lastPos指向14。这样就将同一个刻度上面的TimerLog记录全都串起来了。
  有了TimerWheel和TimerLog之后,我们再来看一下一条定时消息从发送到RocketMQ之后是怎么最终投递给用户的。
  首先,当发现用户发送的是一个定时消息过后,RocketMQ实际上会将这条消息发送到一个专门用于处理定时消息的系统Topic里面去
  然后在TimerMessageStore中会有五个Service进行分工合作,但整体可以分为两个阶段:入时间轮和出时间轮
  对于入时间轮:TimerEnqueueGetService负责从系统定时Topic里面拉取消息放入enqueuePutQueue等待TimerEnqueuePutService的处理TimerEnqueuePutService负责构建TimerLog记录,并将其放入时间轮的对应的刻度中
  对于出时间轮:TimerDequeueGetService负责转动时间轮,并取出当前时间刻度的所有TimerLog记录放入dequeueGetQueueTimerDequeueGetMessageService负责根据TimerLog记录,从CommitLog中读取消息TimerDequeuePutMessageService负责判断队列中的消息是否已经到期,如果已经到期了,那么将其投入用户的Topic中,等待消费消费;如果还没有到期,那么重新投入系统定时Topic,等待重新进入时间轮。实战:使用定时消息
  了解了RocketMQ秒级定时消息的原理后,我们看下如何使用定时消息。首先,我们需要创建一个定时延时消息类型的Topic,可以使用控制台或者CLi命令创建。
  从前面可以看出,对于定时消息来说,是在发送消息的时候做文章。所以,对于生产者,相对于发送普通消息,我们可以在发送的时候设置期望的投递时间。
  当定时的时间到了之后,这条消息其实就是一条投递到用户Topic的普通消息而已。所以对于消费者来说,和普通消息的消费没有区别。
  注意:定时消息的实现逻辑需要先经过定时存储等待触发,定时时间到达后才会被投递给消费者。因此,如果将大量定时消息的定时时间设置为同一时刻,则到达该时刻后会有大量消息同时需要被处理,会造成系统压力过大。所以一般建议尽量不要设置大量相同触发时刻的消息。
  作者:凯易、明锻
  原文链接:https:click。aliyun。comm1000352905
  本文为阿里云原创内容,未经允许不得转载。

人在囧途2020年1月18日到2月13日的东南亚自由行(三)越南篇(二)1月22日,飞大叻,飞机是早上8点45分的。昨天让前台找的巴拿山包车司机人真的很好,所以就定了今天一早送我们去机场,岘港机场离市区不是太远,又是越南国内飞,所……原神新活动想抬大剑角色却难抬,大剑角色没落根源在哪?《原神》最新的活动残像暗战应该有不少玩家尝试了。按照设定上说,应该是主角见证年轻时候的迪卢克,穿着年轻时候的皮肤殷红终夜锁条战国的一系列关卡。不过有一个很大的问题是,很可……最新研究发现这样做有利孩子发育教育孩子的全部秘密在于相信孩子和解放孩子。而相信孩子,解放孩子,首先就要学会夸奖孩子,没有夸奖就没有教育。日本有一儿童教育学家的一项研究曾引起许多教育人士关注。研究表明,……时隔11年詹姆斯明日将再度出战德鲁联赛北京时间7月16日,据名记克里斯海耶斯报道,湖人球星勒布朗詹姆斯预计将参加明天的德鲁联赛。德鲁联赛是在洛杉矶当地举行的职业球员和非职业球员共同参与的混合篮球联赛,由埃尔文……钻石王老五李厚霖经历三段感情,濒临破产危机,后得以看破红尘身价数十亿,钞票豪车无数,身边更是先后有三位女星陪伴,这样的生活,谁看了不说一句羡慕,然而,今天这个故事的男主角,恒信钻石的董事长李厚霖,却主动放弃了手里的一切,选择出家……廖三宁面部被四处骨折,绝对不能禁赛与罚款了事!要严惩许钟豪今天是大年初一,小编向一年来关心爱护支持鲁源侃球平台的各位老铁和读者朋友表示衷心的感谢,借此机会给您和家人拜年!祝福鲁源侃球的所有读者朋友和家人虎年吉祥,龙虎生威!鲁源侃球以关……苦命的孩子暗恋女孩多年,一直埋藏在心底,你是我一生放不下的人人生有八苦:生,老,病,死,爱别离,怨长久,求不得,放不下。最苦的、最缠人心的莫过于爱不得。那个年代,吃了上顿没下顿的人家比比皆是。有的家庭孩子多,劳动力少,分到手的粮食……中国小将闪耀意大利,下一个进NBA的球员?他有别人没有的优势曾凡博、余嘉豪和郭昊文三位中国球员都报名参加今年的NBA选秀,但是都落选了,虽然后来曾凡博和郭昊文都得到邀约,分别代表步行者和独行侠参加夏季联赛,但是留在NBA的希望十分渺茫。……开心麻花变身怪杰将首演李海银赖艺拒绝emo,拥抱快乐奇幻爆笑话剧《变身怪杰》将于6月30日至7月17日在北京海淀剧院上演,超强剧本加持,麻式爆笑改编,加上宝藏爱国女孩李海银强势回归,《且试天下》皇朝赖艺跨界加盟,双星联动,看巫师……程凯养生说肚脐左边长期疼痛,大便不成形腹鸣怎么回事?肚脐左边长期疼痛同时大便不成形、腹鸣到底是怎么回事?从这个问题当中可以得到一个信息是在肚脐的左边长期出现疼痛,应该说长期的疼痛肯定不是一个急性疼痛、肯定不是肠痉挛急腹症,……活出自我,才是人生最高段位作家赫尔曼黑塞曾说过:对每个人而言,真正的职责只有一个,那就是找到自我。然后坚守一生,全心全意,永不停息。所以,我们与其去感叹生活的诸多不如意,不如努力去寻找自我,活出自……单亲妈妈张柏芝41岁带3个孩子赚奶粉钱,不用男人也能活得精彩是我害了你,对不起。这是某次采访中,周星驰对张柏芝诚恳的道歉。在周星驰看来,如果不是自己选择让张柏芝出演《喜剧之王》,也许她的人生就不会这么一波三折。但是张柏……
夜读向快乐出发来源:河南法制报朗读者:张杰我喜欢出发文汪国真我喜欢出发。凡是到达了的地方,都属于昨天。哪怕那山再青,那水再秀,那风再温柔。太深的流连便成了一种羁……一身白色,搭配出那种出尘的气质穿一身白色的人是不是会有点洁癖,但是那么干净的服装确实是没有一点污渍,我一直不敢穿白色衣服出门,就是特别怕洗衣服,而且出门稍不留意就会蹭了哪里,就脏了,如果不及时清洗就容易留下……孩子有了这些症状需注意下,有可能是白血病,家长莫忽视周女士有个漂亮可爱的宝宝,很快就四岁了。本是很幸福的妈妈看着自己孩子健康长大,整体围着自己,有时懂事的很让人心疼。可是一场意外去到医院进行检查,便查出了白血病。周女士和老公为了……2岁半的孩子,手机上瘾?看我怎么办说到孩子玩手机这事儿,我们做家长的真的是咎由自取。话虽然难听,但反观自己的种种做法,真的是这样。睡觉前各玩各的手机,家里一片祥和?!我们都知道孩子玩手机,玩电子产品……触控屏硬件加密,金士顿推出移动固态硬盘VP80ES感谢IT之家网友OCFormula、华南吴彦祖、斗皇圣佛的线索投递!IT之家5月25日消息,据金士顿官方消息,在台北电脑展期间,金士顿推出全新的加密产品IronKeyVa……世界500强排行榜公布中国4家企业入围前10位最近2022年《财富》世界500强排行榜公布了,世界第一位的还是沃尔玛,已经连续9年居于榜首,亚马逊排名第二位。中国企业有4家企业入围前10位,分别是国家电网有限公司、中……GeIL推出全球首款带RGB风扇的DDR5内存条IT之家5月19日消息,据GeIL官方消息,GeILEVOVDDR5RGB内存条现已发布,采用了双风扇散热系统,将RGB灯效和双风扇主动式的散热设计结合到一体成型的模组中。……60的她真时髦!穿衣不按年龄定律,好衣品让年轻人都自叹不如夏日成长计划嗨,大家好!我是跟大家分享怎么变美的南曦,希望我的文章会给大家带来一些时尚灵感,愿每个人都能活出自己最美的样子!她,原职业是大学老师,一次偶然的机会让她……澜起科技宣布率先试产DDR5第二子代RCD芯片,支持速率达5IT之家5月9日消息,据澜起科技官方消息,澜起科技业界率先试产DDR5第二子代寄存时钟驱动器芯片M88DR5RCD02,该芯片支持的数据速率高达5600MTs,适用于大数据、人……DDR5内存超频新纪录技嘉OC团队成功实现10022MTsIT之家5月1日消息,日前,微星团队率先将DDR5内存超频到了DDR510004MTs。没过几天,该纪录又被技嘉打破。IT之家了解到,技嘉超频团队使用了使用了英特尔酷睿i……AI让老人不止听得见,还能听得清每年因外界噪音影响及年龄增长因素,面临听损乃至听障挑战的老人,正变得越来越多。世界卫生组织(WHO)报告显示,听力损失目前影响着全球超过15亿人,未来30年,听力受损者的人数可……十铨发布ELITE系列DDR54800笔记本内存,可选832IT之家3月29日消息,今天,十铨科技宣布推出ELITESODIMMDDR5笔记本内存,预计4月中旬上市。IT之家了解到,十铨TEAMGROUPELITESODIMMDD……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网