消息队列MQ是一种应用程序对应用程序的通信方法。本质是一种先进先出的数据结构。
MQ将消息持久化后,发送Ack消息给Client,此处有可能因为网络问题导致Ack消息无法发送到Client,那么Client在等待超时后,会重传消息;
消息传输保证层级?
At most once:最多一次。消息可能会丢失,但不会重复传输。
At least once:最少一次。消息绝不会丢失,但可能会重复传输。
Exactly once: 恰好一次,每条消息肯定仅传输一次。
生产者如何将消息可靠投递到MQ?
1.Client发送消息给MQ
2.MQ将消息持久化后,发送Ack消息给Client,此处有可能因为网络问题导致Ack消息无法发送到Client,那么Client在等待超时后,会重传消息;
3.Client收到Ack消息后,认为消息已经投递成功。
MQ如何将消息可靠投递到消费者?
1.MQ将消息push给Client(或Client来pull消息)
2.Client得到消息并做完业务逻辑
3.Client发送Ack消息给MQ,通知MQ删除该消息,此处有可能因为网络问题导致Ack失败,那么Client会收到重复消息,这里就引出消费幂等的问题;
4.MQ将已消费的消息删除