RabbitMQ的持久化

1.为什么需要RabbitMQ的持久化?

当接收队列信息需要一定时间或者队列进行延迟接收时,RabbitMQ突然宕机或被关闭,会导致消息队列在发送之后直接丢失,此时就需要我们来做持久化的操作,保证消息不会丢失

2.RabbitMQ持久化的实现

首先在channel.queueDeclare方法的第二个参数,将其设置为true,并且在channel.basicPublish方法的第三个参数设置为MessageProperties.PERSISTENT_TEXT_PLAIN



public class ProTask {
    public static final String QUEUE_NAME="ack_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
        Channel channel = RabbitMQUtils.getChannel();
        Boolean durable=true;//开启持久化
        channel.queueDeclare(QUEUE_NAME,durable,false,false,null);

        Scanner scanner =new Scanner(System.in);
        while (scanner.hasNext()){
            String message =scanner.next();
            //将消息持久化到磁盘
            channel.basicPublish("",QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());
            System.out.println("消息已发送..");
    }
    }
}

3.注意事项

如果之前声明的队列不是持久化的,需要把原先队列先删除,或者重新创建一个持久化的队列

如果创建之后显示如图所示则为成功

RabbitMQ的持久化_第1张图片

4.缺点

尽管它告诉 RabbitMQ 将消息保存到磁盘,但是当它还没有来得及被保存在磁盘上时,被删除了或者宕机了,依旧会造成信息丢失,但是对于简单任务队列足够使用

你可能感兴趣的:(rabbitmq,分布式,笔记,安全)