1.高可用性
高可用性指的是 就算机器挂挂了,也还是可用。就一句话:搞个集群(这里的集群是mq本身即支持的集群,而不是机器的简单组合)可以百度一下RabbitMq的集群搭建哈
2.消息不被重复消费
a.因为这问题通常不是 MQ 自己保证的,是由我们开发来保证的。MQ只保证消息可靠,不保证消息是否重复消费。
可以让生产者在生产消息的时候,给每个消息带上一个唯一的ID,类似于订单id的东西。然后消费者消费的时候,先到redis里面去查一次,第一次肯定是查询不到,然后将该值存入redis中。如果查询到了,就代表是重复消费,不消费即可。
b.如果是把消息插入到数据库中,可以利用数据库的唯一索引来保证,可以把消息的某一列设计成唯一索引。
3.消息丢失
a.生产者丢失了消息:可以开启rabbitmq的confirm模式 一般在生产端开启。过程就是:在生产消息的时候会携带一个ID,然后你发给rabbitmmq 。它收到以后会回复你 会给你一个ack消息,没有收到的话,他会调用你的nack接口,告诉你它没接到你的消息,你可以重试。
b.rabbitmq丢失了消息 开启rabbitmq的持久化。具体怎么开,请百度
c.消费者丢失了消息 开启rabbitmq的ACK机制,就是消费一个消息给rabbitmq发送一个消息。
4.消息有序性
一个queue一个consumeer,不要一个queue多个consumer。多建立一些queue而已。
5.消息满了怎么办,存不下了怎么办?
一般就是consumer出了问题,先修复consumer,然后紧急扩容,整一个queue,扩成原来的10倍。先把线上的数据直接移到到临时的queue中。