RabbitMQ——ACK确认机制

一。介绍

1.消费者从RabbitMQ收到消息并处理完成后,反馈给RabbitMQ,RabbitMQ收到反馈后才将此消息从队列中删除
2.消费者在处理消息出现了网络不稳定、服务器异常等现象,那么就不会有ACK反馈,RabbitMQ会认为这个消息没有正常消费,会将消息重新放入队列中
3.只有当消费者正确发送ACK反馈,RabbitMQ确认收到后,消息才会从RabbitMQ服务器的数据中删除。
4.消息的ACK确认机制默认是打开的,消息如未被进行ACK的消息确认机制,这条消息被锁定Unacked

二。确认方式

1.自动确认(默认)

2.手动确认 manual

spring:
  rabbitmq:
    #开启手动确认消息
    listener:
      simple:
        acknowledge-mode: manual

3.两种方式区别

转载:

非常好理解的推文

https://www.cnblogs.com/refuge/p/10356750.html

三。deliveryTag介绍

表示消息投递序号,每次消费消息或者消息重新投递后, deliveryTag都会增加

四。basicNack和basicReject介绍

1.basicReject一次只能拒绝接收一个消息,可以设置是否requeue。
2.basicNack方法可以支持一次0个或多个消息的拒收,可以设置是否requeue。

用处举例:

人工审核异常消息:
设置重试阈值,超过后确认消费成功,记录消息,人工处理

代码:

部分代码可参考:

https://www.cnblogs.com/tianhengblogs/p/15341670.html

https://www.cnblogs.com/tianhengblogs/p/15342226.html

RabbitMQ------ACK确认机制
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
@RabbitListener(queues = "order_queue")
public class OrderMQListener {

    /**
     * body: 接收onvertAndSend(String exchange, String routingKey, Object object)的order消息
     *
     * */
    @RabbitHandler
    public void messageHandler(String body, Message message, Channel channel) throws IOException {

        long msgTag = message.getMessageProperties().getDeliveryTag();
        System.out.println("body: " + body);
        System.out.println("msgTag: " + msgTag);
        System.out.println("message: " + message.toString());

        //告诉broker(消息队列服务器实体),消息已经被确认
        channel.basicAck(msgTag, false);
        //告诉broker,消息拒绝确认(可以拒绝多条,把比当前msgTag值小的也拒绝)
//        channel.basicNack(msgTag, false, true);
        //告诉broker,消息拒绝确认(只能拒绝当前msgTag的这条)
//        channel.basicReject(msgTag, true);
    }
}

View Code

Original: https://www.cnblogs.com/tianhengblogs/p/15343601.html
Author: 玉天恒
Title: RabbitMQ——ACK确认机制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540205/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • nginx只允许域名访问,禁止ip访问

    背景:为什么要禁止ip访问页面呢? 这样做是为了避免其他人把未备案的域名解析到自己的服务器IP,而导致服务器被断网,我们可以通过禁止使用ip访问的方法,防止此类事情的发生。 解决方…

    Java 2023年5月30日
    063
  • uni-app 不介入第三方,本地调用手机通知栏

    配置: 勾选push 配置manifest.json “app-plus” : {“modules” : {“Push&…

    Java 2023年5月29日
    087
  • 6.824 Spring 2020 feb14 Lab1MapReduce 笔记

    简介 这个实验要求我们使用 golang 自行实现一个支持并发和简单容错的 分布式 MR ,支持一个 master 多个 wokrer 的工作模式。 我做完实验之后去看了一下之前网…

    Java 2023年5月29日
    060
  • dubbo源码分析8(服务消费者之生成代理对象)

    前面几篇博客,说了很多dubbo服务提供者相关的流程; 复习一下:首先服务提供者去暴露服务接口数据到注册中心,然后本地启动netty服务端监听是否有消费者的请求,现在我们可以看看消…

    Java 2023年6月6日
    093
  • 2020年度钻石C++C学习笔记(2)–《博学谷》

    1. 以下标示符中命名合法的是 A A、A B、ab.c C、@rp D、2Y_ 2. 设 a 和 b 均为 double 型变量,且a=5.5、b=2.5,则表达式(int)a …

    Java 2023年6月7日
    038
  • MVC架构-01

    MVC 本文为动力节点老杜web课程mvc部分笔记,以银行转账项目为例 不使用MVC框架(分析存在的问题 1.搞个数据库 CREATE TABLE t_act ( id bigin…

    Java 2023年6月14日
    093
  • nginx重新整理——————nginx 模块[十]

    前言 简单介绍一下nginx的模块。 正文 https://nginx.org/en/docs/ 这里面可以看到官方模块。 比如打开这个模块: https://nginx.org/…

    Java 2023年5月30日
    075
  • 面试题

    Redis 用过Redis吗,它使用在哪些地方(使用场景)?(阿里一面) 为什么用Redis做排行榜?(阿里一面) 如何保持Redis和MySQL数据一致?(阿里一面) poste…

    Java 2023年6月15日
    098
  • 如何在电脑上配置Vue开发环境

    一,开发环境 : Node JS(npm) Visual Studio Code(前端IDE) 安装NodeJS 下载地址: nodejs中文网 Visual Studio Cod…

    Java 2023年6月15日
    085
  • windows 2003 不同网段 无法 文件共享 VSS设置

    网上搜索了很多解答,比如设置VPN, 修改ETC表, 自己也设置了VPN,确实可以,设置的过程需要关闭WINDOWS自带的防火墙,让我觉得不太习惯。 就研究了下防火墙的例外项 点击…

    Java 2023年6月14日
    082
  • 编程入门之日志聚合系统

    (关心具体部署的同学,可以移步我的另外一篇《Centos部署Loki日志聚合系统 》https://www.cnblogs.com/uncleguo/p/15975647.html…

    Java 2023年6月15日
    070
  • 关键字、标识符和保留字

    关键字 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所字母都为小写 保留字 具体哪些保留字:goto 、const注意: 1、自己命名标识符时要避…

    Java 2023年6月7日
    076
  • Spring自动配置实现原理详解

    详情参阅系列:https://blog.csdn.net/f641385712/category_10035396.html Note: Spring中的配置分为Full模式和Li…

    Java 2023年5月30日
    079
  • HashMap原理

    Java7 : 数组 + 链表 Java8: 数组 + 链表 + 红黑树 (链表超过8则转为红黑树,小于6则变会链表) >> 加快查询. 源码如下: 参数解释: DEF…

    Java 2023年6月8日
    058
  • JetBrains IDE全新UI预览版来了,要做简洁与强大兼顾的IDE

    5月23日,JetBrains发布了一篇博文,透露他们正在实现一套全新的界面界面。 他们认为目前行业中的用户界面趋势已经发生了演变,很多新用户认为JetBrains IDE的界面过…

    Java 2023年6月9日
    085
  • 动态代理大揭秘,带你彻底弄清楚动态代理!

    前言 代理模式是一种设计模式,能够使得在不修改源目标的前提下,额外扩展源目标的功能。即通过访问源目标的代理类,再由代理类去访问源目标。这样一来,要扩展功能,就无需修改源目标的代码了…

    Java 2023年6月8日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球