消息中间件
1.RabbitMQ如何保证消息不丢失
- 生产者确认机制
- 持久化
- 消费者确认机制
- 消费者失败重试机制
2.RabbitMQ消息重复消费问题如何解决
- 解决方案:
- 每个消息设置唯一标识id
- 幂等方案(分布式锁,数据库锁(悲观锁,乐观锁))
3.RabbitMQ延迟队列(死信交换机)了解过吗
- 死信:
- 消费者声明消费失败,并且消息的requeue参数设置为false
- 消息是一个过期消息,超时无人消费
- 要投递的队列消息堆积满了,最早的消息可能为死信
- 死信交换机:给队列设置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,这个交换机称为死信交换机
- TTL(Time-To-Live):消息存活时间,一个队列中TTL结束仍未消费,则变成死信
- 消息所在的队列设置了存活时间
- 消息本身设置了存活时间
- 延迟队列插件:DelayExchange,
- 可给交换机设置delayed属性,声明延迟交换机
- 发消息添加x-delay头,值为超时时间
4.RabbitMQ有消息堆积怎么解决
- 解决方案:
- 提高消费者的消费能力 ,可以使用多线程消费任务
- 增加更多消费者,提高消费速度
- 扩大队列容积,提高堆积上限
- 使用惰性队列,特点如下:
- 接收到消息后直接存入磁盘而非内存,支持数百万条的消息存储
- 消费者要消费消息时才会从磁盘中读取并加载到内存
- 性能稳定但基于磁盘存储,受限于磁盘IO,时效性降低
5.RabbitMQ高可用机制
- 普通集群
- 镜像集群
- 冲裁集群