消息持久化
需要在消息生产者发布消息的时候,开启消息的持久化
在 basicPublish 方法的第二个参数添加这个属性: MessageProperties.PERSISTENT_TEXT_PLAIN
,如 13 行代码
public class Task02 {
//队列名称
public static final String TASK_QUEUE_NAME = "ACK_QUEUE";
public static void main(String[] args) throws IOException, TimeoutException {
Channel channel = RabbitMQUtils.getChannel();
//队列持久化
boolean durable = true;
//声明队列
channel.queueDeclare(TASK_QUEUE_NAME,durable,false,false,null);
//在控制台中输入信息
Scanner scanner = new Scanner(System.in);
System.out.println("请输入信息:");
while (scanner.hasNext()){
String message = scanner.next();
//设置生产者发送消息为持久化消息(要求保存到磁盘上)
channel.basicPublish("",TASK_QUEUE_NAME,MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes("UTF-8"));
System.out.println("生产者发出消息:"+ message);
}
}
}
将消息标记为持久化并不能完全保证不会丢失消息。尽管它告诉 RabbitMQ 将消息保存到磁盘,但是这里依然存在当消息刚准备存储在磁盘的时候 但是还没有存储完,消息还在缓存的一个间隔点。此时并没 有真正写入磁盘。持久性保证并不强,但是对于我们的简单任务队列而言,这已经绰绰有余了。