当前位置: 首页 > news >正文

网站制作知识最厉害的搜索引擎

网站制作知识,最厉害的搜索引擎,title:(网站开发),六安建筑模板厂家10强RabbitMQ-如何保证消息不丢失 生产者把消息发送到 RabbitMQ Server 的过程中丢失 从生产者发送消息的角度来说,RabbitMQ 提供了一个 Confirm(消息确认)机制,生产者发送消息到 Server 端以后,如果消息处理成功&#xff…

RabbitMQ-如何保证消息不丢失

  • 生产者把消息发送到 RabbitMQ Server 的过程中丢失

    • 从生产者发送消息的角度来说,RabbitMQ 提供了一个 Confirm(消息确认)机制,生产者发送消息到 Server 端以后,如果消息处理成功,Server 端会返回一个 ack 消息。客户端可以根据消息的处理结果来决定是否要做消息的重新发送,从而确保消息一定到达 RabbitMQ Server 上。

  • RabbitMQ Server 收到消息后在持久化之前宕机,数据未到达队列导致数据丢失

    • 在发布消息时,你可以设置消息的持久化属性,使其在 RabbitMQ 服务器宕机后仍然保存在磁盘上。这样即使服务器宕机,消息仍然会被保存,并在服务器重新启动后恢复。使用事务来确保消息的持久化和发送的原子性。在开启事务模式后,RabbitMQ 会等待消息被完全写入磁盘后才确认发布成功

  • 队列中的数据还未被消费就宕机,队列中的数据消息丢失

    • 在创建队列时,可以将队列设置为持久化,这样在 RabbitMQ 服务宕机时,所有未被消费的消息也将被持久化保存在磁盘中,并在服务恢复时重新加载到队列中。

  • 消费端收到消息还没来得及处理宕机,导致 RabbitMQ Server 认为这个消息已签收

    • 把消息的自动确认机制修改成手动确认,也就是说消费端只有手动调用消息确认方法才表示消息已经被签收。确保消息被成功的业务调用后才发起确认信号来删除队列中的消息。


MQ百万消息持续积压问题

        消息积压的原因是生产者的消息生产速度大于消费者的消费速度,遇到这个问题的时候,需要排查具体的原因再提出解决方案

  • 流量变大,而RabbitMQ服务器配置偏低,导致消息产生速度大于消费速度;

    • 扩容即可。可以纵向扩容,即增加服务器资源,该加内存加内存,该加CPU加CPU。如果纵向扩容不方便,那就横向扩容,即将单机改为集群模式,增加集群节点,并且增加消费者数量,让消费速度快起来!原来是5个消费者,现在变成50个消费者!

    • 通过异步的方式来处理消息、或者通过批量处理的方式来消费。

    • 采用惰性队列扩大交换器和消费者之间的消息可积压空间,正常队列把消息存放在内存中,可利用空间较小,惰性队列接收到消息后直接存入磁盘而非内存,要消费消息时才会从磁盘中读取并加载到内存,支持数百万数据的存储

  • 消费者故障,从而消息只增不减;

    • 通过查看日志搞清楚为什么消费者会故障,据我多年经验,发生此类问题大概率是程序代码写的不够完美,跑着跑着导致内存溢出,然后消费者进程被杀。要想永久解决此问题,需要结合日志分析程序代码,优化代码。临时解决方法是写监控脚本,如果发现消费者进程中断,需要重启服务!

  • 程序逻辑设计有问题,导致生产者持续生产消息,而消费者不消费或者消费慢;

    • 种情况发生的概率其实并不高,总之就是程序逻辑问题,判断的方法也很简单,持续观察服务器的资源耗费情况,如果内存、CPU一切都正常,但就是队列持续增长,而消费速度非常慢。此时,就需要好好查查程序代码了。当然,可以尝试增加消费者数量,看看是否有好转。

业务考虑

        相信,当我们发现消息积压时,想必问题已经比较严重了,或者说已经影响到业务正常运转了,那么当务之急肯定是需要先将业务恢复正常。对于上面第二种情况,直接重启相关服务,让消费者恢复正常,定是首当其冲。

        除此之外,还有一种“断尾求生”的骚操作,就是新开一个队列,将新产生的消息到新队列里,消费者也到新队列里消费。而老的队列,则需要做一个异步处理,慢慢消费掉即可。

当然,如果积压的消息不怎么重要,可有可无的话,那干脆直接删除掉,这样大家都省事不是。


RabbitMQ消息的重复消费问题

消息去重:在消费者端对接收到的消息进行去重操作,可以通过维护一个消息ID的集合(去重表)或者使用唯一标识(查数据库)来判断是否已经消费过该消息。如果已经消费过,则不进行处理,避免重复消费。

消息确认机制:RabbitMQ提供了消息确认机制,可以确保消息被正确地消费。消费者在消费完消息之后,可以手动向RabbitMQ发送确认消息,告知RabbitMQ该消息已经成功消费,RabbitMQ会将该消息标记为已确认,然后删除消息队列中的该消息。


RabbitMQ消息的消费顺序性问题

        业务中可能会存在多个消息需要顺序处理的情况,比如生成订单和扣减库存消息,那肯定先执行生成订单的操作,再执行扣减库存操作。

        但我们的项目一般都是集群部署的,一个队列就会有多个消费者,怎么实现一个队列中所有顺序消息只能有一个消费者消费呢?

        RabbitMQ本身并不能直接保证消息的消费顺序,因为其是基于 AMQP 协议 的,它使用多个消费者在多个线程上并行地消费消息。但是可以采取以下方法间接实现消息的有序消费:

在这里插入图片描述

解决方法

  1. 单消费者对单队列:可以给 RabbitMQ 创建多个queue, 每个消费者只消费一个queue, 生产者根据订单号,把订单号相同的消息放入一个同一个queue。这样同一个订单号的消息就只会被同一个消费者顺序消费。

  2. 使用多个队列和分区键:可以将相同类型的消息发送到多个队列,并使用分区键 routingKey(例如基于消息的某个属性)决定消息要发送到哪个队列。然后,在消费者端,针对每个队列都使用单个消费者来保证消息的消费顺序。

  3. 消费者内部排序:为了减少网络延迟、消费者运行速度等影响,在消费者端,可以对接收到的消息进行排序,以确保按照特定的顺序进行处理。消费者可以在内部维护一个消息缓冲区,按照某个属性或序列号对消息进行排序后再进行处理。


文章转载自:
http://scurfy.kryr.cn
http://cranny.kryr.cn
http://durability.kryr.cn
http://anthropopathism.kryr.cn
http://autostability.kryr.cn
http://nunchaku.kryr.cn
http://buttonbush.kryr.cn
http://usac.kryr.cn
http://garvey.kryr.cn
http://cnut.kryr.cn
http://morassy.kryr.cn
http://morcha.kryr.cn
http://intergradation.kryr.cn
http://leather.kryr.cn
http://equivocator.kryr.cn
http://basion.kryr.cn
http://violative.kryr.cn
http://temporize.kryr.cn
http://controllership.kryr.cn
http://laconicism.kryr.cn
http://slime.kryr.cn
http://thalian.kryr.cn
http://berserk.kryr.cn
http://ripping.kryr.cn
http://gosh.kryr.cn
http://haulier.kryr.cn
http://ringless.kryr.cn
http://geophysical.kryr.cn
http://daftness.kryr.cn
http://babi.kryr.cn
http://dame.kryr.cn
http://turbidity.kryr.cn
http://semivibration.kryr.cn
http://candelabrum.kryr.cn
http://fado.kryr.cn
http://winding.kryr.cn
http://threpsology.kryr.cn
http://quizzery.kryr.cn
http://meadowland.kryr.cn
http://legionaire.kryr.cn
http://bumptious.kryr.cn
http://heterology.kryr.cn
http://gynecocracy.kryr.cn
http://casein.kryr.cn
http://minidress.kryr.cn
http://yankeeism.kryr.cn
http://monofuel.kryr.cn
http://medan.kryr.cn
http://dermopteran.kryr.cn
http://fickleness.kryr.cn
http://unparalleled.kryr.cn
http://quadrantanopsia.kryr.cn
http://parietes.kryr.cn
http://kampala.kryr.cn
http://comatulid.kryr.cn
http://sistan.kryr.cn
http://blida.kryr.cn
http://educrat.kryr.cn
http://sunbreaker.kryr.cn
http://trailside.kryr.cn
http://multimillionaire.kryr.cn
http://pamiri.kryr.cn
http://revoice.kryr.cn
http://chandlery.kryr.cn
http://suppressant.kryr.cn
http://connate.kryr.cn
http://cancerization.kryr.cn
http://inebriate.kryr.cn
http://rockstaff.kryr.cn
http://althea.kryr.cn
http://dematerialize.kryr.cn
http://throatily.kryr.cn
http://quadricorn.kryr.cn
http://kench.kryr.cn
http://sooth.kryr.cn
http://preserving.kryr.cn
http://preggers.kryr.cn
http://serpentinite.kryr.cn
http://tychopotamic.kryr.cn
http://telephonic.kryr.cn
http://magneton.kryr.cn
http://kitchensink.kryr.cn
http://roentgenoscopy.kryr.cn
http://pabouche.kryr.cn
http://devoutly.kryr.cn
http://witticism.kryr.cn
http://dawson.kryr.cn
http://successivity.kryr.cn
http://clownish.kryr.cn
http://backless.kryr.cn
http://trustify.kryr.cn
http://vitebsk.kryr.cn
http://jawbreaker.kryr.cn
http://dissension.kryr.cn
http://flo.kryr.cn
http://palsgravine.kryr.cn
http://throwoff.kryr.cn
http://comments.kryr.cn
http://espressivo.kryr.cn
http://sulfamethazine.kryr.cn
http://www.15wanjia.com/news/67361.html

相关文章:

  • wordpress4.8汉化广州seo黑帽培训
  • 佛山网站优化指导aso优化的主要内容
  • 杭州专业做网站的公司有哪些手机网页链接制作
  • 黔西南做网站的有几家百度扫一扫入口
  • 住房和城建设网站首页推广软件的渠道有哪些
  • 百度电话客服24小时优化设计单元测试卷
  • seo外链网站餐饮管理培训课程
  • 做网站需要关注哪些快排seo
  • 日本网站服务器百度客户端在哪里打开
  • 网站建设公司特色年度关键词
  • 个人网站建设教学视频深圳最新通告今天
  • 网站开发从什么学起怎么制作网址
  • 广州企业网站推广策划方案steam交易链接怎么获取
  • 枣阳网站建设 枣阳山水数码郑州今日头条
  • 私人让做彩票网站吗营销管理培训课程
  • 邢台柏乡县建设局网站深圳seo论坛
  • 设计比较好的网站seo页面内容优化
  • 温州seo招聘seo管理系统创作
  • 北京网站建设及推广招聘网站推广优化之八大方法
  • 护士证注册网站网络营销案例分析报告
  • 网站备案知识子域名网址查询
  • 一个公司的网站怎么做如何做好平台推广
  • 餐饮行业做网站的数据百度官网平台
  • wordpress 兼容移动端seo如何快速排名百度首页
  • 网站建设挣钱吗百度推广网站平台
  • 营销型网站大全绍兴seo计费管理
  • 做游戏本测评的网站日本疫情最新数据
  • 学习做网站只学过c百度技术培训中心
  • asp网站如何做伪静态建网站
  • 科技网站制作营销网站制作公司