zoukankan      html  css  js  c++  java
  • 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也可以完成该操作。

  • 相关阅读:
    附加目录中所有的数据库文件
    SQL Server 2008中的GROUPING SETS的应用实例
    Gmail式的上传
    ubuntu9.10下配置需要用户名及密码的上网代理(squid)
    【jQuery】仿IPhone的滑动操作效果
    Ubuntu9.10下Nginx+PHP(Fastcgi) 安装过程
    如何从SQL Server 中取得字段说明
    SQL server 2005 更改数据库名称
    ASP通过SMTP发邮件
    数据库镜像出现“无法访问或不存在"故障的原因和解决方案
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/9339892.html
Copyright © 2011-2022 走看看