消息队列的相关问题

it2025-02-11  28

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中。

 

   

最新回复(0)