2019独角兽企业重金招聘Python工程师标准>>>

为什么要设置手动ack,消息确认

  1. 设置主动的主要作用是进行消息确认,
  2. 自动确认会在消息发送给消费者后立即确认,如果手动则当消费者调用ack,nack,reject几种方法时进行确认.
  3. 一般会设置手动模式,业务失败后可以进行一些操作.

    //消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息

    channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

    //ack返回false,并重新回到队列,api里面解释得很清楚

    channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);

    //拒绝消息

    channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);

如何设置手动ack

1,设置消费监听配置
  acknowledge="manual"

<rabbit:listener-container   connection-factory="connectionFactory" acknowledge="manual"><!-- queues 监听队列,多个用逗号分隔 ref 监听器 --><rabbit:listener queues="test_queue_key2" ref="Consumer2" /></rabbit:listener-container>

2,实现ChannelAwareMessageListener 接口

package com.mq.rabbitmq;import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;import com.rabbitmq.client.Channel;public class ChannleConsumer implements ChannelAwareMessageListener {@Overridepublic void onMessage(Message message, Channel channel) throws Exception {try {//消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);System.out.println("onMessage方法结束");} catch (Exception e) {//ack返回false,并重新回到队列,api里面解释得很清楚channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);e.printStackTrace();System.out.println("onMessage方法异常结束");}}}

转载于:https://my.oschina.net/u/3647713/blog/1577807

rabbitmq消费者设置手动ack相关推荐

  1. rabbitmq设置手动ack报错:Channel closed; cannot ack/nack

    记一次rabbitmq设置手动ack报错:Channel closed; cannot ack/nack 报错内容 前置条件 出现错误情况 出现问题原因 解决办法 报错内容 java.lang.Ill ...

  2. rabbitmq自动及手动ACK

    mq的ack  主要是确认消息被消费者消费完成后通知服务器将队列里面的消息清除. 而如果不配置Ack的话呢,我测试过他会自动的忽略,也就是说此时的服务是no_ack=true的模式,就是说只要我发现你 ...

  3. springboot整合rabbitmq 消费者Consumer 手动进行ack确认

    ack指Acknowledge,确认. 表示消费端收到消息后的确认方式. 有三种确认方式: 自动确认:acknowledge="none" 手动确认:acknowledge=&qu ...

  4. SpringBoot整合RabbitMQ 消息可靠投递、手动ack、延迟队列、死信队列、消息幂等性保障、消息积压

    1.消息可靠投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景.RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式. confirm 确认模式 ...

  5. Springboot整合RabbitMQ手动ACK

    消息应答 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务但是只完成了部分突然它挂掉了,会发生什么情况?RabbitMQ 一旦向消费者传递了一条消息,便立即将该消息标记为删除.在 ...

  6. SpringCloudStream——RabbitMQ 手动ACK,Channel 参数为空?

    问题描述 使用SpringCloudStream 集成RabbitMQ的过程中,一直无法使用手动ACK功能. SpringCloud版本:Hoxton.RELEASE SpringBoot 版本:2. ...

  7. RabbitMQ的消息确认ACK机制

    1.什么是消息确认ACK. 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失.为了确保数据不会丢失,RabbitMQ支持消 ...

  8. Rabbitmq如何设置优先级队列?如何限流?如何重试?如何处理幂等性?

    优先级队列 方式一:可以通过RabbitMQ管理界面配置队列的优先级属性,如下图的x-max-priority 方式二:代码设置 Map<String,Object> args = new ...

  9. rabbitmq消费者“无故消失”

    导读:9月1号17:12左右,发现影子队列存在大量"unacked"(收到了消息,但是还没有手动确认消息)的消息,一段时间后"unacked"的数量没有减少,但 ...

  10. RabbitMQ 消费者回执和发布确认

    为了保证数据安全,消费者和生产者的回执(ack)都是非常重要的. 由于我们无法保证消息都能像我们期望的那样,正常到达另一端或者被 Consumer 消费成功.因此,publisher 和 consum ...

最新文章

  1. go语言培训班多少钱
  2. vector机器人 HOW TO MEET VECTOR 如何满足向量
  3. 不用计算实现 图片懒加载
  4. Linux wc命令统计文件大小
  5. 有关Vector里面元素重复解决办法
  6. django-restframework使用
  7. Object to XML
  8. matlab 红黑强度图片,matlab图形锐化程序
  9. 小汤学编程之JavaScript学习day03——对象、Array数组、String字符、Date日期、JSON
  10. N天学习一个linux命令之rsync
  11. Python字符串isalnum()
  12. 场地测量的方法和程序_施工测量方案
  13. 【qq机器人】发送表情包
  14. 纯干货:嘀嘀打车App初期是怎么推广的? 钱皓-互联网分析师,微信号(qianhaoapp)
  15. DOORS vs DNG
  16. LaTex关于数学公式的使用(11)--- 单位
  17. nand读寿命_Nand Flash的擦写次数与使用寿命
  18. 小米2019秋招软件开发笔试题A选择部分解析
  19. 软件测试黑盒测试代码,软件测试黑盒测试代码.doc
  20. UE4 通过按键升降电梯

热门文章

  1. Exp3免杀原理与实践 20154326杨茜
  2. iframe 模拟ajax文件上传and formdata ajax 文件上传
  3. 组合模式Composite
  4. 难道现在是保险业的高速发展期?
  5. 测试Live Writer Beta2功能
  6. Jquery实现全选反选和省城市联动效果
  7. java自定义异常和throw、throws的使用
  8. Myeclipse2014中,新建部署Maven项目
  9. C/C++深度分析(二)
  10. SpringMVC 、Struts2之间的区别