范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

RabbitMQ消息丢失消息积压原因解决方案私人心得

  一、前言首先说一点,企业中最常用的实际上既不是RocketMQ,也不是Kafka,而是RabbitMQ。
  RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用RocketMQ的没有想象中那么多。
  深层次的原因在于兔宝在中小企业普及更早,经受的考验也更久,很容易产生「回头客」,当初随RabbitMQ成长的一批人才如今大部分都已成为企业中的中坚骨干,技术选型亲睐RabbitMQ的几率就更高。
  至于Kafka,主要还是用在大数据和日志采集方面,除了一些公司有特定的需求会使用外,对消息收发准确率要求较高的公司依然是以RabbitMQ作为企业级消息队列的首选。
  工作这么多年我自身的感受是,RabbitMQ经久不衰,除非后续其他消息中间件有与众不同的使用体验,否则依然是RabbitMQ的占有率更高。
  所以准备进入软件行业的小伙伴,我建议有必要系统的先把RabbitMQ学好,然后再学习其他消息中间件扩展视野,他们的原理大同小异,是可以触类旁通的。
  二、两个概念
  RabbitMQ避免消息丢失的方法主要是利用消息确认机制和手动签收机制,所以有必要把这两个概念搞清楚。   1、消息确认机制
  主要是生产者使用的机制,用来确认消息是否被成功消费。
  配置如下:
  这样,当你实现RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback这两个接口的方法后,就可以针对性地进行消息确认的日志记录,之后做进一步的消息发送补偿,以达到接近100%投递的目的。
  伪代码如下:
  2、消息签收机制RabbitMQ的消息是自动签收的,你可以理解为快递签收了,那么这个快递的状态就从发送变为已签收,唯一的区别是快递公司会对物流轨迹有记录,而MQ签收后就从队列中删除了。
  企业级开发中,RabbitMQ我们基本都开启手动签收方式,这样可以有效避免消息的丢失。
  前文中已经在生产者开启了手动签收机制,那么作为消费方,也要设置手动签收。
  配置如下:
  消费监听时,手动签收就一行代码,伪代码如下:
  三、消息丢失
  两个概念搞清楚后,就可以来学习消息丢失的问题和处理方案了。   1、出现原因消息丢失的原因无非有三种:
  1)、消息发出后,中途网络故障,服务器没收到;
  2)、消息发出后,服务器收到了,还没持久化,服务器宕机;
  3)、消息发出后,服务器收到了,消费方还未处理业务逻辑,服务却挂掉了,而消息也自动签收,等于啥也没干。
  这三种情况,(1) 和 (2)是由于生产方未开启消息确认机制导致,(3)是由于消费方未开启手动签收机制导致。   2、解决方案1)、生产方发送消息时,要try...catch,在catch中捕获异常,并将MQ发送的关键内容记录到日志表中,日志表中要有消息发送状态,若发送失败,由定时任务定期扫描重发并更新状态;
  2)、生产方publisher必须要加入确认回调机制,确认成功发送并签收的消息,如果进入失败回调方法,就修改数据库消息的状态,等待定时任务重发;
  3)、消费方要开启手动签收ACK机制,消费成功才将消息移除,失败或因异常情况而尚未处理,就重新入队。
  其实这就是前面阐述两个概念时已经讲过的内容,也是接近100%消息投递的企业级方案之一,主要目的就是为了解决消息丢失的问题。
  四、消息重复1、出现原因消息重复大体上有两种情况会出现:
  1)、消息消费成功,事务已提交,签收时结果服务器宕机或网络原因导致签收失败,消息状态会由unack转变为ready,重新发送给其他消费方;
  2)、消息消费失败,由于retry重试机制,重新入队又将消息发送出去。   2、解决方案网上大体上能搜罗到的方法有三种:
  1)、消费方业务接口做好幂等;
  2)、消息日志表保存MQ发送时的唯一消息ID,消费方可以根据这个唯一ID进行判断避免消息重复;
  3)、消费方的Message对象有个getRedelivered()方法返回Boolean,为TRUE就表示重复发送过来的。
  我这里只推荐第一种,业务方法幂等这是最直接有效的方式,(2)还要和数据库产生交互,(3)有可能导致第一次消费失败但第二次消费成功的情况被砍掉。
  五、消息积压1、出现原因消息积压出现的场景一般有两种:
  1)、消费方的服务挂掉,导致一直无法消费消息;
  2)、消费方的服务节点太少,导致消费能力不足,从而出现积压,这种情况极可能就是生产方的流量过大导致。   2、解决方案1)、既然消费能力不足,那就扩展更多消费节点,提升消费能力;
  2)、建立专门的队列消费服务,将消息批量取出并持久化,之后再慢慢消费。
  (1)就是最直接的方式,也是消息积压最常用的解决方案,但有些企业考虑到服务器成本压力,会选择第(2)种方案进行迂回,先通过一个独立服务把要消费的消息存起来,比如存到数据库,之后再慢慢处理这些消息即可。
  六、使用心得这里单独讲一下本人在工作中使用RabbitMQ的一些心得,希望能有所帮助。
  1)、消息丢失、消息重复、消息积压三个问题中,实际上主要解决的还是消息丢失,因为大部分公司遇不到消息积压的场景,而稍微有水准的公司核心业务都会解决幂等问题,所以几乎不存在消息重复的可能;
  2)、消息丢失的最常见企业级方案之一就是定时任务补偿,因为不论是SOA还是微服务的架构,必然会有分布式任务调度的存在,自然也就成为MQ最直接的补偿方式,如果MQ一定要实现100%投递,这种是最普遍的方案。但我实际上不推荐中小企业使用该方案,因为凭空增加维护成本,而且没有一定规模的项目完全没必要,大家都小看了RabbitMQ本身的性能,比如我们公司,支撑一个三甲医院,也就是三台8核16G服务器的集群,上线至今3年毫无压力;
  3)、不要迷信网上和培训机构讲解的生产者消息确认机制,也就是前面两个概念中讲到的ConfirmCallback和ReturnCallback,这种机制十分降低MQ性能,我们团队曾遇到过一次流量高峰期带来的MQ传输及消费性能大幅降低的情况,后来发现是消息确认机制导致,关闭后立马恢复正常,从此以后都不再使用这种机制,MQ运行十分顺畅。同时我们会建立后台管理实现人工补偿,通过识别业务状态判断消费方是否处理了业务逻辑,毕竟这种情况都是少数,性能和运维成本,在这一块我们选择了性能;
  4)、我工作这些年使用RabbitMQ没见过自动签收方式,一定是开启手动签收;
  5)、手动签收方式你在网上看到的教程几乎都是处理完业务逻辑之后再手动签收,但实际上这种用法是不科学的,在分布式的架构中,MQ用来解耦和转发是非常常见的,如果是支付业务,往往在回调通知中通过MQ转发到其他服务,其他服务如果业务处理不成功,那么手动签收也不执行,这个消息又会入队发给其他消费者,这样就可能在流量洪峰阶段因为偶然的业务处理失败造成堵塞,甚至标题所讲的三种问题同时出现,这样就会得不偿失。
  不科学的用法  :在处理完业务逻辑后再手动签收,否则不签收,就好比客人进店了你得买东西,否则不让走。
  科学的用法  :不论业务逻辑是否处理成功,最终都要将消息手动签收,MQ的使命不是保证客人进店了必须消费,不消费就不让走,而是客人能进来就行,哪怕是随便看看也算任务完成。
  可能有人会问你这样不是和自动签收没区别吗,NO,你要知道如果自动签收,出现消息丢失你连记录日志的可能都没有。
  另外,为什么一定要这么做,因为MQ是中间件,本身就是辅助工具,就是一个滴滴司机,保证给你送到顺便说个再见就行,没必要还下车给你搬东西。
  如果强加给MQ过多压力,只会造成本身业务的畸形。我们使用MQ的目的就是解耦和转发,不再做多余的事情,保证MQ本身是流畅的、职责单一的即可。
  七、总结本篇主要讲了RabbitMQ的三种常见问题及解决方案,同时分享了一些作者本人工作中使用的心得,我想网上是很难找到的,如果哪一天用到了,不妨再打开看看,也许能避免一些生产环境可能出现的问题。
  我总结下来就是三点:
  1)、消息100%投递会增加运维成本,中小企业视情况使用,非必要不使用;
  2)、消息确认机制影响性能,非必要不使用;
  3)、消费者先保证消息能签收,业务处理失败可以人工补偿。
  工作中怕的永远不是一个技术不会使用,而是遇到问题不知道有什么解决思路。
  END
  私信作者回复「资源」有更多惊喜内容哦!

需要新蓝牙耳机,具有32小时长续航和耐用的蓝牙耳机品牌寻找合适的耳机可能是一个乏味的过程,但如果您想要物超所值,许多续航时间超过30小时的蓝牙耳机也不贵,而且适合游戏玩家使用。无论您是听音乐还是接听电话,都可以使用蓝牙耳机进行无线操作谁能阻止76人夺冠通过这两场比赛,不得不说76人确实强大,内外线均衡,进攻防守都相当了得,内线大帝进攻无敌,防守不是一般人能打的,就连字母到内线都怕,躲着打。外线哈登进攻也是历史级别,没几个能防住,离谱!被打261,勇士黑暗的第四节,三大问题始终未曾改变一场可以说是本赛季勇士队耻辱一败的比赛就在今天毫无征兆的发生了,他们在第三节的时候一度领先到了21分,顺风顺水的勇士队看起来又要收获一场20的大胜了。但是在第四节,他们打出了极其辣苏翊鸣的金牌还有消息吗?冬奥会改判正式官宣德国队铜牌被取消虽然全球体育盛会北京冬奥会已经结束了,但围绕本届冬奥会上的奖牌归属问题仍然有些争议。这不,国际滑雪联合会就正式官宣了,在2月17日进行的自由式滑雪女子障碍追逐决赛中,由于裁判的误判北控男篮惹争议!解散马布里团队后或无缘季后赛在CBA历史上,出现过几次球队伤病严重,无人可用的情况,包括了当初南京同曦,只报名了7名球员,新疆男篮也因为后卫无人可用,导致被辽宁男篮淘汰,就此告别强队的行列。而现在马布里也正在7年离别!辽篮旧将发文感慨,郭士强没留他,赵继伟登门送礼物CBA第三阶段比赛即将在3月1日正式打响,分别在沈阳和佛山进行,两拨球队已经奔赴各自的赛区,其中山西队接下来要在沈阳面对诸多对手的挑战,队内的外线核心原帅是辽宁鞍山人,也是辽篮旧将辽篮三消息郭艾伦跟队训练,蒋指导回归,大韩金金状态良好今日辽宁男篮官方更新了入驻赛区后的第一次训练视频,笔者也通过媒体人的各方面消息总结了辽篮三个消息。消息一郭艾伦虽然左腿拉伤,预计休战23周,但目前慢跑拉伸等基础热身训练都可以完成,一本影响谷爱凌的书乔丹科比训练师的13条野蛮进化法则1,关于本书这是一本在冬奥会闪耀的运动员谷爱凌推崇备至的书。同时,这也是一本科比布莱恩特亲自作序的书。科比生前能亲自作序,是因为本书主要作者蒂姆S格罗弗,他是科比的私人训练师。此外沙尔克从衬衫上移除了俄罗斯天然气工业股份公司但俄罗斯冠名赞助商对俱乐部的融资仍然保留了下来。沙尔克04不仅仅是德国的一家足球俱乐部。这是一个传奇。皇家蓝色俱乐部来自鲁尔区的采矿小镇盖尔森基兴。它的名字来自同名的地区。沙尔克是00后小花邓恩熙现身,棋盘格毛绒外套少女感满满,走机场还带书点击上方关注小丸子,获取更多有趣有料的时尚资讯和明星穿搭。时间如梭,随着80后大花们的年华老去,90后的中花也已经奔三或者三十多了,慢慢都开始成为过去式,而00后的小花们开始争奇斗毛衣阔腿裤!高级且温柔今天和大家说说,毛衣阔腿裤,怎么穿才好看?四季流转,有些搭配只为对应变幻的风景,而有些衣服却穿成了风格!ollam林虽说穿搭的关键在于搭配,(毛衣阔腿裤)但选对了款式,也能轻轻松松
23个月宝宝闹觉经常哭闹,并非故意磨人,和发育特点有关妈妈群一大早有妈妈吐槽我家孩子不到3个月,每天晚上闹觉,几乎每次都哭很长时间才能睡着,昨天哭了整整3个小时,孩子哭,家里人就大喊大叫,我都快崩溃了,我家孩子真是来讨债的,怎么这么难牛爱芳挑萝卜玩假摔,气得拿老演员撒气,网友影帝名不虚传这两天,牛爱芳夫妇在社交平台公布了一个消息,称小春花已经顺利生下二胎,引发了网友们的热议。凭借这件事,牛爱芳夫妇的口碑处于洗牌的边缘,这几天已经涨粉二十多万。尝到了甜头,牛爱芳夫妇生死狙击中为什么说环峰在近战和变异模式中是一个BUG的存在?幻锋是一把动能切割刃,混合了碳纳米管的高强度合金刀刃在切割目标时,会产生高频震动将目标分子推向两边从而实现切割。刀身的弧线确保攻击时更加省力,同时对目标造成可观的拖拉伤害。后期可根手机行业大变天!酷派让利新模式冲击传统,OV还能招架得住吗?从2021年国内智能手机出货量来看,vivoOPPO拿下了国内手机市场前二的位置,市场份额均超过了20,苹果则以16的市场份额位居第三,而在全球市场排名前三的小米,在国内仅有15。不出国门,沉浸式体验餐厅,人均40左右带你感受舌尖上的泰国眼下出境游不太合适,吃货们是不是有点怀念国外的美食啦?今天Abby给大家分享的就是氛围感和口感俱佳的泰式大排档迷你椰。说实话,有绿植装饰的餐厅见过不少,但是连帐篷和沙滩椅沙滩伞都齐猎罪图鉴导演很会选人,俊男靓女还有不得不说的双男主CP感猎罪图鉴简直就是美女帅哥合集了,连看10集之后,发现里面演员不仅是演技好,颜值简直养眼,明明是个悬疑破案片,偏偏里面的人物设定那么的贴合,关键是配角演技好,而且是不是很眼熟,他们绝王牌7导演发声,否认关晓彤看提词器,宋亚轩将会以学业为重王牌对王牌算得上是老牌综艺了,能陪伴观众走过6季的综艺并不多。节目本身也经历着很大的考验,包括嘉宾阵容内容创新招商投资等问题,都需要慎重考虑。随着王牌对王牌第7季播出,观众的吐槽声乡村民宿设计路径与方法民宿虽小,却是撬动当前旅游供给侧改革乡村发展的杠杆支点。正因为小因为轻因为美,才更容易吸引大量的社会中小资本众多的投资经营人群,盘活社会大量的闲置资源,创造出小而精小而美小而特的多金牌旅游村福建永泰白杜村青山绿水藏白杜田园农家话桑麻青山隐隐,曲水迢迢的白杜村微风山谷之中,一村村舍掩映绿水青山之间,黄墙青瓦古民居层层叠叠,田园阡陌纵横,茉莉花暗香浮动,这里便是白杜村。白杜村为永泰县梧桐镇建制村,位于永泰县西北部惊蛰后,犯春困的时节到了,记得做好这2件事,疏通脾胃补足阳气春困,是你的身体在告警!俗话说春困秋乏夏打盹,春天犯困太常见了,早上起不来饭后没精神,满满都是雨后春笋般的特困生。明明春天万物生机勃勃的,为啥我们就困起来了呢?尤其惊蛰节气过后,冬春天喝碗汤,免得开药方?护肝补血调脾胃,睡眠也越来越好春季风多雨少,天气干燥,人体内的水分很容易丢失。再加上天气变化反复无常,不能保持人体新陈代谢的平衡和稳定,导致生理机能失调,上火便秘咽喉疼痛等各种小毛病都爱找上来。饮食上建议大家多