RabbitMQ简单应用の消息持久化

消息应答:

 消息应答默认是打开的(false)

 boolean autoAck = true;自动确认模式,表示一旦MQ将消息给到消费者,就会从内存中删除该条消息,这种情况下,如果杀死正在执行的消费者,那么就会丢失正在处理的消息(也就是数据丢失)

 boolean autoAck = false;手动确认模式,表示MQ将消息分发给消费者后并不会及时的删除存储在内存中的消息,而是在接收到消费者的回执后才会从内存中删除相应的消息,这样就保证了数据不会在有一个消费者挂掉,那么分配给该消费者的消息就会丢失的现象。

  由于消息是存储在内存中的,这个时候如果MQ挂掉,那么所有的消息都会从内存中被清除掉,为了确保数据的持久化,我们在声明队列信息的时候,就需要对durable进行设置。

/*这个是Channel.class中的声明队列的方法,这个方法的第二个参数 durable 就是声明数据持久化的标志  false是非持久化  true是持久化*/ 
Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,Map<String, Object> arguments) throws IOException;
// 声明队列 
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        

  注意:如果一个队列一旦被声明,那么该队列中的任何参数将不会在被改变,也就是是RabbitMQ是不允许被声明过的队列被重新定义不同的参数,如果非要进行此操作,那么通过MQ的服务器(http://localhost:15672/#/queues)删除已经被声明过的队列信息,然后即可进行当前重新定义的操作。或者重新给队列分配一个新的名称QUEUE_NAME也可以完成该操作。

猜你喜欢

转载自www.cnblogs.com/pengpengzhang/p/9339892.html