谷粒商城实战笔记-260-商城业务-消息队列-可靠投递-消费端确认

news2024/11/13 11:26:02

文章目录

  • 一,Ack消息确认机制简介
    • 1,简介
    • 2,两个常用的Api
  • 二,消费者端消息确认实战
  • 三,RabbitMQ可靠性保障总结
    • 1,生产者
    • 2,消费者

一,Ack消息确认机制简介

在这里插入图片描述
消费者端的确认机制(ACK/NACK)是RabbitMQ中一种重要的特性,它允许消费者告知Broker它们是否成功处理了接收到的消息。

1,简介

  1. basic.ack:
    当消费者成功处理了一条消息时,它可以发送一个basic.ack(肯定确认)给Broker,指示这条消息可以安全删除。基本语法如下:

    channel.basicAck(deliveryTag, false); // deliveryTag是消息的唯一标识符,multiple参数设为false表示仅确认这一条消息
    
  2. basic.nack:
    如果消费者无法处理消息,它可以发送一个basic.nack(否定确认)。这可以让Broker重新分发消息,或者直接丢弃它。基本语法如下:

    channel.basicNack(deliveryTag, false, false); // deliveryTag是消息的唯一标识符,multiple参数设为false表示仅确认这一条消息,requeue参数设为false表示直接丢弃
    
  3. 默认行为:
    在默认情况下,消费者一旦接收到消息,消息就会从队列中移除。然而,如果你希望在处理完成后再确认消息,可以关闭自动确认模式,然后手动发送ack/nack信号。

  4. 手动确认模式:
    可以通过设置channel.basicQos(0, true)来开启手动确认模式。在这种模式下,消费者必须显式地发送ack或nack信号,否则消息不会从队列中移除。

  5. nack/reject:
    basic.nack和basic.reject都可以用来否定确认消息。它们的主要区别在于,reject可以指定重试次数,而nack则没有这个选项。reject还可以指定是否重新排队,而nack只能重排或丢弃。

  6. 示例:

    channel.basicConsume(queueName, false, consumerTag, autoAck, arguments, consumer);
    // ...
    channel.basicAck(deliveryTag, false); // 成功处理
    channel.basicReject(deliveryTag, requeue); // 失败处理,requeue为true表示重排,false表示丢弃
    

通过消费者端的确认机制,可以确保消息得到正确的处理,并且在处理失败时能够重新分发。这有助于构建可靠的分布式系统,并防止消息丢失。

2,两个常用的Api

basicAckbasicNack都是RabbitMQ中的消息确认机制,用于告诉Broker消费者是否成功处理了接收到的消息。它们的主要区别在于:

  1. 基本用途:

    • basicAck:用于确认消息已被成功处理,告诉Broker可以从队列中删除该消息。
    • basicNack:用于否定确认消息,告诉Broker消息处理失败,可能需要重新分发或丢弃。
  2. 重排消息:

    • basicAck:不会引起消息重排,因为它只是确认消息已被成功处理。
    • basicNack:可以选择让Broker将消息重新放回到队列中,供其他消费者尝试处理。
  3. 丢弃消息:

    • basicAck:不会导致消息被丢弃。
    • basicNack&#x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM32开发——(六)GPIO_USART通信原理

1. 串行通信和并行通信 1.1 串行通信 串行通信是一种数据传输的方式,它是指将数据按照一位一位的顺序依次发送和接收,常用于远距离通信、嵌入式系统和低带宽传输场景下。串行通信相对于并行通信而言,只需要传输一条数据线,相对简…

Cgroup Driver配置异常导致的节点k8s涉及到的pod无法启动问题的处理

文章目录 前言一、现象二、问题定位1.docker服务检查2.message日志检查3.检查Cgroup Driver的配置4.修改/etc/docker/daemon.json文件 总结 前言 Cgroup Driver配置异常导致的节点k8s涉及到的pod无法启动问题的处理。 同事有台云主机重启之后,发现k8s相关的pod全部…

优维er看网易云之崩:巨头稍息的一小步,行业前进的一大步

撰文:右耳失聪的左撇子 制图:脾气超好 8月19日,网易云当了半天的“网抑云”,不开玩笑,我认为这是一场:真技术滑铁卢。 和很多朋友一样,数字音乐早已经深度融入我的日常生活,而作为一…

xss-labs靶场通关详解(11-15关)

第11关 referer 进行抓包 添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第12关 进行抓包 修改User Agent:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第13关 抓包 修改C…

python列表去重,一行实现 太优雅~

今天咱们来聊聊在 Python 中如何优雅地实现列表去重。 这是一个非常经典的问题,虽然很多人都会,但如何更优雅的实现呢?这里有不少有趣的解决方法。话不多说,咱们直奔主题。 方法一:用 set 去重 先来看个最简单的方法…

C语言基础(二十一)

C语言中的链表是一种常见的数据结构,用于存储一系列的元素,但与数组不同的是,链表中的元素在内存中不是连续存储的。链表中的每个元素称为节点(Node),每个节点包含两个部分:一部分是存储数据的数…

智能开发工具GoLand v2024.2全新发布——更好地支持Go框架和语言

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议,通过一步撤消快速安全重构,智能代码完成,死代码检测和文档提示帮助所有 Go 开发人员,从新手到经验丰富的专业人士,创建快速、高效、和可靠的…

美创科技荣获“中国数据安全领域最具商业合作价值企业”

近日,数据智能产业创新服务媒体“数据猿”联合上海大数据联盟正式发布《2024中国数据安全领域最具商业合作价值企业盘点》,美创科技凭借在数据安全领域专业领先能力,荣获“最具商业合作价值企业”。 《2024中国数据安全领域最具商业合作价值企…

【Qt】Qt系统 | Qt文件

文章目录 一. 输入输出设备类二. 文件读写类三. 文件和目录信息 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力,封装了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文…

Ubuntu上搭建Nginx环境

1. 软件包下载 nginx下载地址 下载linux版本的nginx,如图圈示 2. 将下载好的软件包上传至Linux服务器 假设上传到 /opt/nginx 目录,进入目录 cd /opt/nginx解压,根据版本自行修改版本号 tar zxvf nginx-1.16.0.tar.gz3.安装 安装编译所需的依赖&a…

IGE-LIO:充分利用强度信息克服激光退化场景下的定位精度

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:IGE-LIO: Intensity Gradient Enhanced Tightly-Coupled LiDAR-Inertial Odometry 作者:Ziyu Chen, Hui Zhu, Biao Yu, Chunmao Jiang, Chen Hua, Xuhui Fu a…

android openGL ES详解——深度缓冲区

一、深度缓冲区概念 深度缓存区是指一块专门内存区域,存储在显存中,用于存储屏幕上所绘制图形的每个像素点的深度值。深度值越大,离观察者越远。深度值越小,里观察者越近。 深度缓冲区与帧缓冲区相对应,用于记录上面…

Linux 进程 | 进程优先级进程的环境变量

文章目录 进程概念4、进程优先级4.1基本概念4.2查看系统进程4.2.1 ps -l4.2.2 PRI & NI 4.3用top命令更改已存在进程的nice: 5、环境变量5.1常见环境变量5.2查看环境变量5.3测试PATH配置环境变量 5.4代码中获取环境变量5.4代码中获取环境变量 进程概念 4、进程…

Linux网络:TCP UDP socket

Linux网络:TCP & UDP socket socket 套接字sockaddr网络字节序IP地址转换bzero UDP socketsocketbindrecvfromsendto TCP socketsocketbindlistenconnectacceptsendrecv 本博客讲解 Linux 下的 TCP 和 UDP 套接字编程。无论是创建套接字、绑定地址,还…

软件设计师全套备考系列文章16 -- 程序设计语言基础知识

软考-- 软件设计师(16)-- 程序设计语言基础知识 文章目录 软考-- 软件设计师(16)-- 程序设计语言基础知识前言一、章节考点二、基本概念三、文法四、有限自动机五、前缀、中缀、后缀表达式六、传值和引用(传址)七、各个程序语言的…

链表OJ题——使用栈实现单链表的逆序打印

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 题目描述&#xff1a;使用栈&#xff0c;实现单链表的逆序打印 二、解题思路 三、解题代码 /*** 非递归实现单链表的顶逆序打印——>通过栈来实现* param*/public void printReverseListFromStack(){Stack<…

HAL库:GPIO唤醒模式 唤醒睡眠模式下的单片机

目录 HAL库&#xff1a;GPIO唤醒模式 唤醒睡眠模式下的单片机 注意事项&#xff1a; 初始化部分&#xff1a; 主函数测试部分 结果如图 HAL库&#xff1a;GPIO唤醒模式 唤醒睡眠模式下的单片机 注意事项&#xff1a; HAL库滴答定时器默认为打开状态&#xff0c;需要关闭…

AI学习指南深度学习篇:循环神经网络(RNN)Python实践

引言 在人工智能的广袤领域中,循环神经网络(Recurrent Neural Networks, RNNs)因其在处理序列数据中的卓越表现而广受关注。RNN的独特之处在于它能够保留输入数据的历史信息,并利用这些信息来预测后续的输出,这使得它在自然语言处理、时间序列预测等领域中拥有广泛的应用…

新审视零阶优化在内存高效大模型微调中的应用

人工智能咨询培训老师叶梓 转载标明出处 随着大模型模型规模的增大&#xff0c;反向传播&#xff08;BP&#xff09;所需的内存开销也日益增加&#xff0c;这对内存效率提出了挑战。尤其是在设备上训练等内存效率至关重要的应用场景中&#xff0c;解决这一问题变得尤为迫切。 …

Sora 代码规范之Refactor this method to not always return the same value.(目的性问题)

Sora描述 Refactor this method to not always return the same value.&#xff08;目的性问题&#xff09; 上述代码&#xff0c;可能出现 总是返回 null 的情况 解决一下 原因&#xff1a;为什么要这么写呢&#xff1f;因为 下面的代码会对 materialInfos 这个集合处理&#…