type
status
date
slug
summary
tags
category
icon
password
上一节说过队列持久化和消息持久化,需要在创建队列和发送消息的时候都设置为持久化,但这样还不足以确定持久化,因为可能正在持久化的时候出现失败,所以就引入了发布确认,在消息真正持久化成功的时候通知生产者持久化成功了,类似于消息的应答机制。

image-20230614140944482
演示发布确认
1、开启发布确认方法
开启发布确认有三种方案:单个发布确认,批量发布确认,异步发布确认
单个发布确认
单个确认发布是当发布一个消息的时候,就等待返回发布确认之后才发第二条消息,是同步的,前一个消息不返回发布确认就不发第二个消息。这样的话效率是比较低的。
运行结果
发布1000个单独确认消息,耗时5594ms
批量发布确认
顾名思义,是先发布一批消息再进行批量确认,这种方式的效率会比单个要高,但缺点是如果出现故障,那么无法知道是哪个消息出了问题。
结果

可以看到速度要快很多
异步确认发布
异步确认发布是通过回调函数来达到消息的可靠性传递的,生产者只需要一直发消息即可,消息是否发布成功会通过回调函数稍后进行通知。是这三种方法中性价比最高的。

结果:

异步消息发布处理失败的情况
新建一个map,发布消息的时候把所有消息放进去,当发布成功的时候,把消息删除掉,剩下的就是发布失败的消息,然后再进行处理。