消息可靠性传递
故障1: 消息发送失败
- 生产者确认:在生产者实施消息发送确认机制,确保消息成功到达交换机和队列。若发送失败,可尝试重新发送。
- 备份交换机:为交换机配置备份交换机。在投递失败时,消息将自动转至备份交换机,以提高消息传递的可靠性。
在Python Pika客户端如果channel.basic_publish
成功返回,无异常抛出,也即代表消息成功发送到消息队列服务器
故障2: 消息队列服务器故障
- 持久化:将消息持久化存储至硬盘,确保服务器重启后消息不会丢失。
故障3: 消息消费失败
- ACK:消费者在成功消费消息后,向服务器返回ACK确认信息,随后消息队列将删除该消息。
- NACK:若消费失败,消费者向服务器返回NACK信息,并可采取以下四种处理方式:
- 重新入队:设置
requeue=true
,使消息重新分发,要求消费端接口具备幂等性。 - 死信队列:设置
requeue=false
并指定死信队列,将消息转为死信后存入死信队列,通常推荐此方法。 - 直接丢弃:对于不重要的消息,设置
requeue=false
直接丢弃,不进行后续处理。 - 写入数据库:设置
requeue=false
,将死信记录于数据库中,
- 重新入队:设置