1.保证消息不会丢失
消息持久化;ACK确认机制;设置集群镜像模式;消息补偿机制
第一种:消息持久化
RabbitMQ的消息是默认放在内存的,如果不特别声明消息持久到磁盘,当节点关掉或者crash(碰撞)掉,消息就会丢失。
那么要把数据持久到磁盘就要满足三个条件,缺一不可
:Exchange(互换) 设置持久化
Queue(队列)() 设置持久化
Message(信息)持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息
第二种:ACK确认机制
就是多个消费者收到消息,收到一半就没了,消费者就死掉了;
这个使用就要使用Message acknowledgment 机制,就是消费端消费完成要通知服务端,服务端才把消息从内存删除,一个消费者出了问题,没有同步消息给服务端,还有其他的消费端去消费,保证了消息不丢的case
第三种:设置集群镜像模式
RabbitMQ三种部署模式:
单点模式:最简单的模式,非集群模式,节点挂了,消息不可用了,业务瘫痪,只能等待;
普通模式:必须消息是持久的,默认是集群模式,某个节点挂了,消息不可用了,业务瘫痪了,此时只能等待节点恢复重启使用;
镜像模式:把队列做成镜像需要的队列,存放于多个节点,
属于RabbitMQ的HA方案;
队列的内容仅仅只存在于某一个节点,并不在所有的节点,节点只会仅仅存放数据结构和元数据。
第四种:消息补偿机制
消息补偿机制需要建立在消息要写入DB日志,发送日志,接受日志,两者的状态必须记录,然后根据DB日志记录check 消息发送消费是否成功,不成功,进行消息补偿措施,重新发送消息处理。