简单了解MQ消息队列 和 ACK机制

什么是MQ?

MQ ——消息中间件 说白了就是存消息的队列。具有一系列的优点,进而成为 异步RPC(异步、远距离调用)的主要手段之一。

MQ的组成

1. Broker

消息服务器,作为server提供消息核心服务

2. Producer

消息生产者,业务的发起方,负责生产消息传输给broker,

3. Consumer

消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理

4. Topic

主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的 广播

5. Queue

队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收

6. Message

消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输

什么是ACK?

ACK——消息确认机制

在实际使用RocketMQ的时候我们并不能保证每次发送的消息都刚好能被消费者一次性正常消费成功,可能会存在需要多次消费才能成功或者一直消费失败的情况,那作为发送者该做如何处理呢?

为了保证数据不被丢失,RabbitMQ支持消息确认机制,即ack。发送者为了保证消息肯定消费成功,只有使用方明确表示消费成功,RocketMQ才会认为消息消费成功。中途断电,抛出异常等都不会认为成功——即都会重新投递。

保证数据能被正确处理而不仅仅是被Consumer收到,我们就不能采用no-ack或者auto-ack,我们需要手动ack(manual-ack)。在数据处理完成后手动发送ack,这个时候Server才将Message删除。

你可能感兴趣的:(简单了解MQ消息队列 和 ACK机制)