首先是个人理解
一、确认应答:
可以在消费端设置自动确认应答和手动确认应答。
将第二个参数设置为true,即表示开启自动应答。
channel.basicConsume(queueName,true,deliverCallBack,cancelCallBack);
开启了自动应答之后,不管消费端有没有处理完从队列里拿到的消息,都会将队列中的消息删除掉。
将这个设置为false,就表示开启了手动应答·,只有在执行了
channel.basicAck(参数一(String类型,消息的tag),参数二(boolean类型,是否为批量应答));后,才会删除队里中的该消息。
二、确认发布
确认发布,是在生产端配置的。如果我们要将消息持久化,就需要保证三步
1、要将消息队列持久化
第二个参数设为true
channel.queueDeclare(QUEUE_NAME,true,false,false,null);
2、要将消息持久化
将第三个参数设为MessageProperties.PERSISTENT_TEXT_PLAIN
channel.basicPublish("",QUEUE_NAME,MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes(StandardCharsets.UTF_8));
3、确认消息发布到了队列中
同步方式:
先开启channel.confirmSelect();//默认是关闭的
其实这里我有些疑问, 为什么异步的方式返回的消息序号是有间隔的,并不是发了多少就确认回来多少,但是队列中的元素又没有少,我猜测可能是异步回调的线程被操作系统吃掉了。