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

RabbitMQ消息的可靠性投递

  RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),广泛微服务系统之间,服务之间消息异步投递。如何保证消息在投递过程的中可靠性呢。下面的文章我这里探讨一下。服务端确认Transaction模式。
  1。将chanel设置成事务模式。
  基于Java,api的设置方式。try{channel。txSelect();channel。queueDeclare(simplequeue,true,false,false,null);创建消息。Stringmessagehellokeelon;发送消息。1。消息要发送的交换机对象,不写使用默认defaultexchange2。当前的路由地址。路由地址,可以写成队列地址3。附加数据可以不写。4。消息channel。basicPublish(,simplequeue,null,message。getBytes(StandardCharsets。UTF8));channel。txCommit();connection。close();}catch(Exceptione){}
  使用springBoot集成的方式。TestvoidTestSendMessage(){rabbitTemplate。setChannelTransacted(true);rabbitTemplate。convertAndSend(itemtopicexchange,item。add,hellospringBootmq);}
  服务端确认的事务方式,这个是阻塞的一条消息没有发送完毕。不能发送下一条消息,影响系统的性能。不建议使用。服务端确认Confirm模式。
  开启发送方确认的模式channel。confirmSelect();channel。basicPublish(fanoutexchange,,null,message。getBytes(StandardCharsets。UTF8));if(channel。waitForConfirms()){System。out。print(消息发送成功);}channel。close();connection。close();
  2。异步确认的方式。channel。addConfirmListener(newConfirmListener(){OverridepublicvoidhandleAck(longdeliveryTag,booleanmultiple)throwsIOException{System。out。print(Brooker未确认消息,标识deliveryTag);if(multiple){headerSet表示后面参数之前的参数全部删除confirmset。headSet(deliveryTag1L)。clear();}else{confirmset。remove(deliveryTag);}}OverridepublicvoidhandleNack(longdeliveryTag,booleanmultiple)throwsIOException{System。out。print(String。format(服务端已经确认消息,标识:d,多个消息b,deliveryTag));if(multiple){headerSet表示后面参数之前的参数全部删除confirmset。headSet(deliveryTag1L)。clear();}else{confirmset。remove(deliveryTag);}}});
  springBoot的集成的实现。rabbitTemplate。setConfirmCallback(newRabbitTemplate。ConfirmCallback(){Overridepublicvoidconfirm(CorrelationDatacorrelationData,booleanack,Stringcause){if(!ack){System。out。println(发送消息失败:cause);thrownewRuntimeException(发送消息失败:cause);}}});rabbitTemplate。convertAndSend(itemtopicexchange,item。add,hellospringBootmq);}路由保证
  在channel中添加listenner监听无法路由的消息。channel。addReturnListener(newReturnListener(){OverridepublicvoidhandleReturn(intreplyCode,StringreplyText,Stringexchange,StringroutingKey,AMQP。BasicPropertiesbasicProperties,byte〔〕bytes)throwsIOException{System。out。println(监听器收到无法路由,被返回的消息);}});消息的持久化
  消息,交换机,队列的持久化处理。AMQP。BasicPropertiespropertiesnewAMQP。BasicProperties。Builder()。deliveryMode(2)2代表持久化。contentEncoding(UTF8)编码。expiration(10000)过期时间。build();RabbitMQ集群
  RabbitMQ最优秀的功能之一就是内建集群,这个功能设计的目的是允许消费者和生产者在节点崩溃的情况下继续运行,以及通过添加更多的节点来线性扩展消息通信吞吐量。RabbitMQ内部利用Erlang提供的分布式通信框架OTP来满足上述需求,使客户端在失去一个RabbitMQ节点连接的情况下,还是能够重新连接到集群中的任何其他节点继续生产、消费消息。RabbitMQ集群中的一些概念
  RabbitMQ会始终记录以下四种类型的内部元数据:队列元数据
  包括队列名称和它们的属性,比如是否可持久化,是否自动删除交换器元数据
  交换器名称、类型、属性绑定元数据
  内部是一张表格记录如何将消息路由到队列vhost元数据
  为vhost内部的队列、交换器、绑定提供命名空间和安全属性
  在单一节点中,RabbitMQ会将所有这些信息存储在内存中,同时将标记为可持久化的队列、交换器、绑定存储到硬盘上。存到硬盘上可以确保队列和交换器在节点重启后能够重建。而在集群模式下同样也提供两种选择:存到硬盘上(独立节点的默认设置),存在内存中。
  如果在集群中创建队列,集群只会在单个节点而不是所有节点上创建完整的队列信息(元数据、状态、内容)。结果是只有队列的所有者节点知道有关队列的所有信息,因此当集群节点崩溃时,该节点的队列和绑定就消失了,并且任何匹配该队列的绑定的新消息也丢失了。还好RabbitMQ2。6。0之后提供了镜像队列以避免集群节点故障导致的队列内容不可用。
  RabbitMQ集群中可以共享user、vhost、exchange等,所有的数据和状态都是必须在所有节点上复制的,例外就是上面所说的消息队列。RabbitMQ节点可以动态的加入到集群中。
  当在集群中声明队列、交换器、绑定的时候,这些操作会直到所有集群节点都成功提交元数据变更后才返回。集群中有内存节点和磁盘节点两种类型,内存节点虽然不写入磁盘,但是它的执行比磁盘节点要好。内存节点可以提供出色的性能,磁盘节点能保障配置信息在节点重启后仍然可用,那集群中如何平衡这两者呢?
  RabbitMQ只要求集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入火离开集群时,它们必须要将该变更通知到至少一个磁盘节点。如果只有一个磁盘节点,刚好又是该节点崩溃了,那么集群可以继续路由消息,但不能创建队列、创建交换器、创建绑定、添加用户、更改权限、添加或删除集群节点。换句话说集群中的唯一磁盘节点崩溃的话,集群仍然可以运行,但知道该节点恢复,否则无法更改任何东西。RabbitMQ集群配置和启动
  如果是在一台机器上同时启动多个RabbitMQ节点来组建集群的话,只用上面介绍的方式启动第二、第三个节点将会因为节点名称和端口冲突导致启动失败。所以在每次调用rabbitmqserver命令前,设置环境变量RABBITMQNODENAME和RABBITMQNODEPORT来明确指定唯一的节点名称和端口。下面的例子端口号从5672开始,每个新启动的节点都加1,节点也分别命名为testrabbit1、testrabbit2、testrabbit3。
  启动第1个节点:RABBITMQNODENAMEtestrabbit1RABBITMQNODEPORT5672。sbinrabbitmqserverdetached
  启动第2个节点:RABBITMQNODENAMEtestrabbit2RABBITMQNODEPORT5673。sbinrabbitmqserverdetached
  启动第2个节点前建议将RabbitMQ默认激活的插件关掉,否则会存在使用了某个插件的端口号冲突,导致节点启动不成功。
  现在第2个节点和第1个节点都是独立节点,它们并不知道其他节点的存在。集群中除第一个节点外后加入的节点需要获取集群中的元数据,所以要先停止Erlang节点上运行的RabbitMQ应用程序,并重置该节点元数据,再加入并且获取集群的元数据,最后重新启动RabbitMQ应用程序。
  停止第2个节点的应用程序:。sbinrabbitmqctlntestrabbit2stopapp
  重置第2个节点元数据:。sbinrabbitmqctlntestrabbit2reset
  第2节点加入第1个节点组成的集群:。sbinrabbitmqctlntestrabbit2joinclustertestrabbit1localhost
  启动第2个节点的应用程序。sbinrabbitmqctlntestrabbit2startapp
  第3个节点的配置过程和第2个节点类似:RABBITMQNODENAMEtestrabbit3RABBITMQNODEPORT5674。sbinrabbitmqserverdetached。sbinrabbitmqctlntestrabbit3stopapp。sbinrabbitmqctlntestrabbit3reset。sbinrabbitmqctlntestrabbit3joinclustertestrabbit1localhost。sbinrabbitmqctlntestrabbit3startappRabbitMQ集群运维
  停止某个指定的节点,比如停止第2个节点:RABBITMQNODENAMEtestrabbit2。sbinrabbitmqctlstop
  查看节点3的集群状态:。sbinrabbitmqctlntestrabbit3clusterstatus
  作者:预流
  链接:https:www。jianshu。comp79ca08116d57
  来源:简书
  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

矿视界译文推特上线比特币打赏功能9月24日开始,iOS系统的Twitter用户可以将Twitter账号关联到比特币钱包地址和闪电网络钱包地址,使用第三方打赏服务,该功能不久后也将在Android系统上推出。……能否摘掉鸡肋产品标签?荣耀平板V7Pro荣耀前不久发布了最新旗舰平板产品:荣耀平板V7Pro,通过近一周时间的实际体验,除了对这款产品的屏幕显示、音质效果比较满意之外,印象最深的还是荣耀Magic悬浮键盘HONORM……美系7座SUV,和凯迪拉克同平台,动力一样少花15万随着二胎政策的开放,7座SUV和MPV成了不少家庭购车的首选车型。今天小编就给大家推荐一款不仅颜值高而且空间还大的SUV,它就是雪佛兰旗下的开拓者。21款开拓者于今年8月份正式……华为Nova6现在还值得入手吗?虽然有些小缺点但毫不影响知道华为手机的用户知道,华为的Nova系列已经更新到第八代。尽管已发布了Nova8系列,但仍应开始使用先前发布的Nova6系列,尤其是5G版本的Nova6。虽然是前两代产……新能源汽车换电站建设将迎来标准化近年来我国新能源汽车市场规模日益壮大,新能源汽车销量屡创新高。新能源汽车对补能依赖极大,目前主流的补能方式以充电和换电为主,充电是通过汽车充电桩为汽车充电,单次充电时间在1小时……DNF更新又出幺蛾子了,上线制裁大礼包!玩家就这格局?国庆节的狂欢浪潮还未褪去,万千勇士又迎来《地下城与勇士》(以下简称DNF)新一轮的版本更新。每逢更新,DNF可以说必出幺蛾子,不是优化没好好做,就是各种Bug,如今一更新,征战……阿里员工双11云上作战虚拟作战室玩出开会新体验双十一大卖!大卖!大卖!11月10日下午,一阵阵欢呼声从电脑屏幕里传出。来自香港、澳门、杭州的十余名天猫淘宝海外事业部的小二汇聚在一间云端会议室中,相互击掌、加油,进行着一场特……云计算第三引擎产品研发商大禹智芯完成PreA轮融资9月7日消息,云计算第三引擎产品研发商大禹智芯完成PreA轮融资,投资方为追远创投、华义创投。据了解,大禹智芯是一家云计算第三引擎产品研发商,聚焦云计算第三引擎DPU(数……网站备案成功后,为什么还会被注销?【新网域名资讯】网站备案是一次性的,不会限制有效期。有客户反应既然之前已经备成功了,为什么我的备案被取消了呢?被取消了怎么办呢?其实工信部很早就下发《关于对已备案网站信息……品牌域名被注册了?关键字品牌组合域名成新选择【新网域名资讯】域名是唯一且不可再生资源,因此很多企业无法在第一时间获得跟品牌完全匹配的域名。很多企业都会有这样的经历:完成了商业计划书,野心勃勃地准备架设网站,开启自己的网络……花小的钱就能享受大满足?这三款合资紧凑型SUV性价比十足国产车的崛起让大家尝到花少钱办大事的甜头,如今伴随着车市寒冬和激烈的竞争,合资车企也玩起了性价比,某些紧凑型SUV也降到十来万价格。今天这三款车型就非常具有性价比,价格也不比自……她不够完美,却还是赢得了我的心,倍思九合一多功能扩展坞评测为什么两个配置相同的扩展坞,价格差却以倍数论?有没有不发烫不掉速的扩展坞?接口数是否越多越好?以价优先还是以品优先?大家好,欢迎收看超级测测测,本期我将分享这款倍思九合一多功能……
38。88万元林肯航海家加州海岸限量版上市限量618台日前,长安林肯官方宣布,旗下的航海家车型新增加州海岸限量版可选,官方指导价为38。88万元,限量618台。外形方面,新车是基于普通版车型打造的,在细节方面增加了一些专属设……全球领先2023年量产长城汽车智慧线控底盘技术首次公开10月28日,长城汽车咖啡智能2。0智慧线控底盘公开课正式线上开讲。据了解,长城汽车智慧线控底盘是以L4级及以上自动驾驶的目标来搭建的技术平台,于今年6月长城汽车第8届科技节上……宽动态活体检测功能,是触控一体机实现自动测温的前提红外热释感应器一般组成结构为:透镜、感光元件、感光电路、机械部分和机械控制部分。其运转主要是通过机械控制部分和机械部分,带动红外感应部分做微小的左右或圆周运动,移动位置,使感应……冷暖自知只需要一个简单好用的凡米耳温枪现代人如何才能知道自身准确的温度呢?也许你会回答,这不是一个体温计就能知道的问题吗?确实,在我们父辈那一代每个家庭几乎都有一个水银体温计,记得每次测体温我都会很抗拒,毕竟冰凉的……2021首届西部云安全峰会将在西安举办2021首届西部云安全峰会将在西安举办9月26日将在西安举办的2021首届西部云安全峰会,本届峰会由西安市网信办指导,腾讯安全云鼎实验室携手西安交通大学、西北工业大学、西……车重不一样,比油耗有意义吗?从奇瑞瑞虎8,到领克,从荣威RX5,再到最新版的哈弗H6,先给大家看一组数据在上面这一组数据中,大家可以发现这些车型不仅都有不错的销量,而且在动力参数都可以的……时代变了!移动通信大会为何首发中国?展会,是信息交流最高效的方式。整个行业的精英聚在一起,以展示产品和方案为媒介,立足现在畅谈未来,不断擦出爱的火花,携手合作就此定格。2021年2月23日至25日,移动通信……人工智能,让一切照片都魔性地动起来近期,2006年火遍中国的神曲《蚂蚁呀嘿》再次火了一把。只需下载一个软件,上传一张图片,就可以让里面的人动起来,扭着脖子,翻着白眼儿,魔性地齐唱《蚂蚁呀嘿》。在好奇……小米手环5上手体验这次我终于不用取下米粒充电了小米手环初代开始,我基本上每一代小米手环都有使用,从简单的提醒到显示时间再到色彩屏的加入,再到如今的成熟化,小米手环5基本就是智能手环的最终状态。我上手小米手环5的时间不……华为P40系列汇总全系5G挖孔双摄刷新拍照新高度起售489826日华为即将线上发布春季新品P40系列,前置双挖孔方形模组已经确定,相关渲染图网络上也是爆料频频,基本上模样就是这样,我们离发布会也就只差个价格了!与以往不同,这次的P……飞利浦27英寸2K显示器,反向充电还能当视频线一款优秀的显示器能让生活方便很多,特别是现在显示器那么多,一款能让我满意的显示器还是不多的。特别是现在笔记本电脑比较多的时候,连接显示器要很方便才行。而今天分享的飞利浦27英寸……翁达陶瓷闪耀2018美国COVERINGS展会2018年5月8日至11日,美国国际石材及瓷砖博览会(Coverings)在美国亚特兰大市乔治亚世界大会中心盛大开幕。为期4天的活动中,会场内人流如潮,气氛热闹非常。来自意大利……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网