zoukankan      html  css  js  c++  java
  • RabbitMQ防止消息丢失

    RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证系统高可用,我们必须作出更好完善措施,保证系统的稳定性。

    1.消息持久化

    2.ACK确认机制

    3.设置集群镜像模式

    4.消息补偿机制

    第一种:消息持久化

    RabbitMQ 的消息默认存放在内存上面,如果不特别声明设置,消息不会持久化保存到硬盘上面的,如果节点重启或者意外crash掉,消息就会丢失。

    所以就要对消息进行持久化处理。如何持久化,下面具体说明下:

    要想做到消息持久化,必须满足以下三个条件,缺一不可。

    1) Exchange 设置持久化

    2)Queue 设置持久化

    3)Message持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息

    第二种:ACK确认机制

    多个消费者同时收取消息,比如消息接收到一半的时候,一个消费者死掉了(逻辑复杂时间太长,超时了或者消费被停机或者网络断开链接),如何保证消息不丢?

    这个使用就要使用Message acknowledgment 机制,就是消费端消费完成要通知服务端,服务端才把消息从内存删除。

    这样就解决了,及时一个消费者出了问题,没有同步消息给服务端,还有其他的消费端去消费,保证了消息不丢。

    第三种:设置集群镜像模式

    我们先来介绍下RabbitMQ三种部署模式:

    1)单节点模式:最简单的情况,非集群模式,节点挂了,消息就不能用了。业务可能瘫痪,只能等待。
    2)普通模式:默认的集群模式,某个节点挂了,该节点上的消息不能用,有影响的业务瘫痪,只能等待节点恢复重启可用(必须持久化消息情况下)。
    3)镜像模式:把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的高可用方案

    为什么设置镜像模式集群,因为队列的内容仅仅存在某一个节点上面,不会存在所有节点上面,所有节点仅仅存放消息结构和元数据。

    高可用三种策略模式:

    1)同步至所有的节点
    2)同步最多N个机器
    3)只同步至符合指定名称的节点

    第四种:消息补偿机制

    消息补偿机制需要建立在消息要写入数据库日志,发送日志,接受日志,两者的状态必须记录。

    然后根据数据库日志记录检验消息发送消费是否成功,不成功,进行消息补偿措施,重新发送消息处理。

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/liuyakun/p/11069212.html
Copyright © 2011-2022 走看看