RabbitMQ可靠性投递与实践经验
1 什么是消息的可靠性投递
1.1 消息可靠性投递目的
关于消息的可靠性投递,从以下几个方面来着手:
保障消息成功发出;
保障MQ成功接收;
发送方接收到MQ响应;
完善的消息补偿机制(如重试机制);
首先需要明确,效率与可靠性是无法兼容的,如果要保证每一个环节都成功,势必会对消息的收发效率造成影响。如果是一些业务实现时,一致性要求不是特别高的场合,可以牺牲一些可靠性来换取效率。如图所示:
①代表消息从生产者发送到Exchange;
②代表消息从Exchange路由到Queue;
③代表消息在Queue中存储;
④代表消费者订阅Queue并消费消息。
1.2 可靠性投递流程
第一种,生产者可靠性投递,只考虑消息是否入列。如图所示:
BIZ DB:订单数据库(或其他具体业务)。
MSG DB:消息数据库。
第1步:将订单入库,创建一条MSG(状态为0) 入MSGDB库。
第2