阅读 59

rabbitmq 怎么保证消息的稳定性

1.保证消息不会丢失
消息持久化;ACK确认机制;设置集群镜像模式;消息补偿机制

第一种:消息持久化

RabbitMQ的消息是默认放在内存的,如果不特别声明消息持久到磁盘,当节点关掉或者crash(碰撞)掉,消息就会丢失。
那么要把数据持久到磁盘就要满足三个条件,缺一不可

Exchange(互换) 设置持久化

Queue(队列)() 设置持久化

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

第二种:ACK确认机制

就是多个消费者收到消息,收到一半就没了,消费者就死掉了;
这个使用就要使用Message acknowledgment 机制,就是消费端消费完成要通知服务端,服务端才把消息从内存删除,一个消费者出了问题,没有同步消息给服务端,还有其他的消费端去消费,保证了消息不丢的case

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

RabbitMQ三种部署模式:

单点模式:最简单的模式,非集群模式,节点挂了,消息不可用了,业务瘫痪,只能等待;

普通模式:必须消息是持久的,默认是集群模式,某个节点挂了,消息不可用了,业务瘫痪了,此时只能等待节点恢复重启使用;

镜像模式:把队列做成镜像需要的队列,存放于多个节点,
属于RabbitMQ的HA方案;

队列的内容仅仅只存在于某一个节点,并不在所有的节点,节点只会仅仅存放数据结构和元数据。

第四种:消息补偿机制

消息补偿机制需要建立在消息要写入DB日志,发送日志,接受日志,两者的状态必须记录,然后根据DB日志记录check 消息发送消费是否成功,不成功,进行消息补偿措施,重新发送消息处理。

了解更多相关技术知识欢迎关注小编!

原文:https://www.cnblogs.com/majhw/p/15308004.html

文章分类
百科问答
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐