Consumer ACK
指Acknowledge,确认
有三种方式:
(1)自动确认:acknowledge=“none”(默认)
(2)手动确认:acknowledge=“manual”
(3)根据异常情况确认:acknowledge=“auto”,使用较为麻烦

自动确认一般是Consumer接收到后就会发送确认信息,并在队列中移除消息,然而在实际生产环境中,有可能出现业务异常,消息就会丢失,通过手动确认,可以确认业务完成后,调用channel.basicAck(),手动确认,出现异常则可以调用channel.basicNack(),自动重新发送消息。

具体流程如下:
1.设置手动确认

# 配置RabbitMQ的基本信息
spring:rabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guestvirtual-host: /#设置手动确认机制listener:simple:acknowledge-mode: manualdirect:acknowledge-mode: manual

2.编写监听类
成功处理则调用basicAck();失败则调用basicNack()

package cn.sysu.listener;import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;import java.io.IOException;@Component
public class AckListener {public static final String QUEUE_NAME1 = "ming-queue1";@RabbitListener(queues = QUEUE_NAME1)public void getMessageFromQueue1(Channel channel, Message message) throws IOException {String msg = new String(message.getBody());try{//如果消息处理失败int num = 1/0;System.out.println("消息处理成功:" + msg);// deliveryTag:该消息的index// multiple:是否批量.true:将一次性ack所有小于deliveryTag的消息// 这里表示该消息已经被消费了 可以在队列删掉 这样以后就不会再发了channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);}catch (Exception e) {System.out.println("消息处理失败:" + msg);// deliveryTag:该消息的index// multiple:是否批量.true:将一次性拒绝所有小于deliveryTag的消息。// requeue:被拒绝的是否重新入队列// 这里表示该消息没有被成功消费,并且将该消息重新入队列channel.basicNack(message.getMessageProperties().getDeliveryTag(), false,true);}}}



博主的坚持 离不开大家评论和点赞,感谢大家支持!!!

1-8 (4). RabbitMQ高级特性-消费端ACK相关推荐

  1. RabbitMQ 高级特性(吐血猝死整理篇)

    文章目录 RabbitMQ 高级特性 消息可靠性投递(可靠性发送) 事务机制 代码实现 发送方确认机制 为什么比事务性能好 示例代码 测试一下QPS 持久化存储 TTL 队列 死信队列(DLX) 延迟 ...

  2. 面试官:RabbitMQ怎么实现消费端限流

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索[小奇JAVA面试]第一时间阅 ...

  3. RabbitMQ(二):RabbitMQ高级特性

    RabbitMQ(二):RabbitMQ高级特性 RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitM ...

  4. 消息中间件--RabbitMQ ---高级特性之消费端ACK与重回队列

    什么是消费端的ACK和重回队列? 消费端的手工ACK和NACK 消费端进行消费的时候,如果由于业务异常我们可以进行日志的记录,然后进行补偿 如果由于服务器宕机等严重问题,那我们就需要手工进行ACK保障 ...

  5. 3 RabbitMQ高级特性 3

    主要为大家讲解RabbitMQ的高级特性和实际场景应用, 包括消息如何保障 100% 的投递成功 ? 幂等性概念详解,在海量订单产生的业务高峰期,如何避免消息的重复消费问题? Confirm确认消息. ...

  6. RabbitMQ高级特性

    文章目录 1. 简述 2. 特性示例: 2.1 消息可靠性投递 2.2 Consumer Ack 2.3 消费端限流 2.4 TTL 2.5 死信队列 2.6 延迟队列 1. 简述 在rabbitMQ ...

  7. 【消息中间件】RabbitMQ 高级特性与应用问题

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

  8. RabbitMQ高级特性——死信队列DLX以及代码测试

    大伙可以到我的RabbitMQ专栏获取更多信息 demo示例这里拿 概述 死信队列,缩写DLX(dead letter exchange 死信交换机),当消息称为dead message之后,会被重新 ...

  9. RabbitMQ高级特性(五):RabbitMQ之死信队列DLX

    一.死信队列简介 (1)死信队列 死信队列,英文缩写:DLX .Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另一个交换机,这个交换机就 ...

最新文章

  1. 批量修改漫游配置文件路径
  2. Android Thread interrupt 中断JAVA线程(转)
  3. ios开发(6)uiimageView
  4. Sublime Text 3 快捷键汇总
  5. 测试SqlHelp,linq to SQL,Nhibernate批量处理数据的效率 2009-06-07
  6. java web 常用工具类_Javaweb常用工具类及配置文件备份
  7. Python 西瓜书机器学习支持向量机(SVM)
  8. security框架工作笔记002---CSRF跨站点请求伪造(Cross—Site Request Forgery)_理解和防御
  9. odoo 财务会计相关介绍
  10. ffmpeg 安装bzlib_编译安装ffmpeg 要支持xvid、x264、mp3、ogg、amr、faac
  11. Java Web ——基于Jsp+Servlet的学生上课签到打卡系统/上课考勤管理系统
  12. android布局详解
  13. Excel打印针式打印机备货单
  14. MySql Workbench 8.0汉化插件分享
  15. python--单例模式
  16. opencv半透明填充不规则区域
  17. 天蓝色在ps中的色值_天蓝色事件网格集成测试
  18. 提高计算机软件速度的方法,小白看过来!提高电脑速度8种实用方法
  19. 1.5黄金白银最新行情走势分析预测,黄金实时操作建议
  20. Laravel框架post的路由出现The page has expired due to inactivity. Please refresh and try again.

热门文章

  1. cmake中的INTERFACE_INCLUDE_DIRECTORIES是干什么的
  2. python里row是什么意思_row python
  3. ​​​​​​​墨画子卿第三章:初心第2节:回家
  4. python对淘宝运营有帮助吗_优秀的淘宝运营需要具备哪些能力
  5. SAPGUI 里 F1 功能键的用法专题讲解试读版
  6. 模板 2018-01-27 分解因数 分解质因数
  7. docker logs使用
  8. go 家庭收支记账软件
  9. 2021-08-11 TM32F103 Buffer FatFs 文件系统移植
  10. windows7彻底删除流氓软件的操作方法