1.MQ什么是消息可靠性?
消息有生产者产生送到MQ,最终被消费者消费完成,这就叫消息可靠性.
RabbitMQ的模型简单模型
pulisher-exchange-queue-consumer
生产者--交换机--队列--消费者
2.消息丢失的几种情况
2.1生成者连接不到MQ
原因:
由于网路不可靠,出现网络波动,生产者暂时连接不到MQ
解决方法:
生产者开启重试策略 ,需在配置文件配置以下信息
2.2生产者消息未达到交换机
解决方发:
生产者开启confirm策略
交换机收到消息返回ack
交换机未收到消息返回nack
2.3生产者消息发送到交换机,没有正确路由到队列
开启 return 回调机制,回调机制RabbitMQ只有一个, 没到队列,失败,会被回调
2.4MQ宕机,队列的消息消失
2.5.消费者收到消息,还没消费,消费者宕机
开启自动ack,并且设置本地重试策略,当本地重试次数耗尽后,失败消息路由到错误队列。
3.如何保证消息不丢失
3.1生产者确认机制
3.2持久化机制
3.33、消费者ack机制
ack取值
manual:手动ack
auto:自动ack。
消费消息不出异常,返回ack给MQ。消费消息出异常了,返回nack,把消息重回队列
4.消息积压问题
分析为什么会有消息积压?
5.MQ与Kafka的区别
6.死信交换机
如果这个包含死信的队列配置了 dead-letter-exchange 属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为 死信交换机 (Dead Letter Exchange,检查DLX)。
RabbitMQ如何实现延迟队列?