1、生产阶段:
通过请求确认机制来保证,即生产者发送消息的Broker以后,Broker在成功收到消息以后,回发送ACK确认到生产者,生成者收到Broker发送的ACK确认以后,则认为消费发送成功了。如果迟迟收不到ACK,生产者会重试,或者抛出异常给用户。
2、存储阶段:
存储阶段只要 Broker 在正常运行,就不会出现丢失消息。但如果 Broker 出现了故障,比如进程死掉了或者服务器宕机了,还是可能会丢失消息。
如果是单实例Broker的化,可以设置同步刷盘,即在返回ACK之前Broker首先将消息写入磁盘,防止因为服务器不可用的消息丢失,下次重启时候可以从磁盘上获取数据。
如果是多个Broker实例组成的集群模式的化,需要设置至少两台以上Broker接收到生产者消息,才发送ACK确认。
3、消费阶段:
消费阶段采用和生产阶段类似的方式来保证消息不丢,Consumer从 Broker 拉取消息后,执行业务逻辑成功后,会给 Broker 发送消费确认ACK。如果 Broker 没有收到消费确认ACK的化,下次Consumer拉取消息的时候还会返回同一条消息,确保消息不会在网络传输过程中丢失,也不会因Consumer在执行业务逻辑中出错导致丢失。