• RabbitMQ确认消息的方式


    RabbitMQ默认是自动确认,也就是消息推送给消费者之后,马上确认并销毁。但是假如消费消息的过程中发生了异常,由于消息已经销毁,这样就会造成消息的丢失。

    除了自动确认之外,还有三种确认方式:手工确认批量确认接受拒绝

    一、手动确认。

    也就是关闭了自动确认

    channel.basicConsume("Queue", false, consumer);

    采用try catch进行捕捉异常

    使用

    channel.basicAck(envelope.getDeliveryTag(), false);

    可以手动确认一条消息,这里basicAck含有两个参数,第一个参数表示当前的投递标签号。相当于当前消息的Id.

    每次向信道进行投递的时候都会产生一个投递标签号,每次加1,作为唯一标识。

    第二个参数表示是否批量确认。true表示批量确认当前以及以前的所有消息。false表示不批量,只是当前这条消息。

    二、批量确认

    有了上面的解释,很容易知道,只需要将basicAck的false改为true,即可实现批量确认

    三、接受拒绝

    当向信道中投递的消息超过了消费者处理能力,就会造成消息积压。这是应该使用消息拒绝,放置消息无止境增长。

    使用

    channel.basicNack(envelope.getDeliveryTag(), false, true);

    basicNack(long deliveryTag, boolean multiple, boolean requeue):deliveryTag表示被拒绝的消息的投递标签;multiple表示是否批量拒绝,若是则所有投递标签小于当前消息且未确认的消息也都将被拒绝,若否则仅拒绝当前消息;requeue表示被拒绝的消息是否重新放回队列,若是则消息会重新回到队列并选择新的消费者进行投递,若否则该条消息会被丢弃。

    记录编程的点滴,体会学习的乐趣
  • 相关阅读:
    2019-1-7 水晶报表
    2018-12-25工作记录 空白行===水晶报表
    2018-7-26-随笔-泛型
    2018-7-20-随笔-转换
    2018-7-18-随笔-接口
    2018-7-17-随笔-params和ref、out用法、事件访问器
    VPS安装metasploit-framework
    Mimiktaz抓取本机密码
    msfvenom生成各类Payload命令
    docker容器开启ssh远程登录
  • 原文地址:https://www.cnblogs.com/AduBlog/p/14778048.html
Copyright © 2020-2023  润新知