当前位置: 首页 > news >正文

rabbitmq中的消息确认

如何保证消息被全部消费

应用场景:我们不想丢失任何任务消息。如果一个工作者(worker)挂掉了,我们希望任务会重新发送给其他的工作者(worker)。

  • 为了防止消息丢失,RabbitMQ提供了消息响应(acknowledgments)。消费者会通过一个ack(响应),告诉RabbitMQ已经收到并处理了某条消息,然后RabbitMQ就会释放并删除这条消息。
  • 如果消费者(consumer)挂掉了,没有发送响应,RabbitMQ就会认为消息没有被完全处理,然后重新发送给其他消费者(consumer)。这样,即使工作者(workers)偶尔的挂掉,也不会丢失消息。

示例

消费者

import time
import pika
from helloWorld.config import userName, passwordcredentials = pika.credentials.PlainCredentials(userName, password)
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', virtual_host='/', credentials=credentials))
channel = connection.channel()
channel.queue_declare(queue='hello-02', durable=True)  # durable=True设置消息持久化def callback(ch, method, properties, body):time.sleep(1)  # 模拟耗时任务print(" [x] Received %r" % body)ch.basic_ack(delivery_tag=method.delivery_tag)  # 此设置是为了有work掉线时,存活的work完成各人原有任务后,队列中掉线的work未处理的任务会重新分配给存活的workchannel.basic_qos(prefetch_count=1)  # 公平调度;告诉RabbitMQ,再同一时刻,不要发送超过1条消息给一个工作者(worker),直到它已经处理了上一条消息并且作出了响应。这样,RabbitMQ就会把消息分发给下一个空闲的工作者(worker)channel.basic_consume('hello-02',callback,# auto_ack=True  # auto_ack=True时,消息响应机制将被关闭auto_ack=False)
# 行一个用来等待消息数据并且在需要的时候运行回调函数的无限循环
channel.start_consuming()

关键点

  • ch.basic_ack(delivery_tag=method.delivery_tag)手动确认消息被正常消费
  • channel.basic_qos(prefetch_count=1)启用公平调度,如果不需要新启work消费消息,可以不设置
  • auto_ack=False关闭消息自动确认,避免消息发送出去后,就被队列移除消息

相关文章:

rabbitmq中的消息确认

如何保证消息被全部消费 应用场景:我们不想丢失任何任务消息。如果一个工作者(worker)挂掉了,我们希望任务会重新发送给其他的工作者(worker)。 为了防止消息丢失,RabbitMQ提供了消息响应&…...

jenkins一键部署github项目

个人目前理解jenkins部署分为两步: 构建项目,如生成jar自动执行sh脚本 如果没有jenkins,我们可能需要将jar移动到服务器,然后执行java -jar跑程序,jenkins可以替代我们执行这些东西,下面从0开始&#xff0…...

岩土工程安全监测隧道中使用振弦采集仪注意要点?

岩土工程安全监测隧道中使用振弦采集仪注意要点? 岩土工程的安全监测是非常重要的,它可以帮助工程师及时发现可能存在的问题,并及时解决,保障施工进度以及施工质量,保障工程的安全运行。其中,振弦采集仪是…...

第四章nginx组件精讲

nginx配件location匹配的规则和优先级(重点面试题) RUI:统一资源标识符,是一种字符串标识,用于标识抽象的或者物理资源(文件,图片,视频) nginx当中:uri ww…...

LlamaGPT -基于Llama 2的自托管类chatgpt聊天机器人

LlamaGPT一个自托管、离线、类似 ChatGPT 的聊天机器人,由 Llama 2 提供支持。100% 私密,不会有任何数据离开你的设备。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、如何安装LlamaGPT LlamaGPT可以安装在任何x86或arm64系统上。 首先确保…...

常见的跨域解决方案

常见的跨域解决方案: 跨域问题可以分为两种情况:前端跨域和后端跨域。以下是针对这两种情况的跨域解决方案: 前端跨域解决方案: JSONP: 适用于前端向不同域名下的服务器请求数据,通过添加回调函数名称来…...

分布式websocket解决方案

1、websocket问题由来 websocket基础请自行学习,本文章是解决在分布式环境下websocket通讯问题。 在单体环境下,所有web客户端都是连接到某一个微服务上,这样消息都是到达统一服务端,并且也是由一个服务端进行响应,所以不会出现问题。 但是在分布式环境下,我们很容易发现…...

奥威BI财务数据分析方案:借BI之利,成就智能财务分析

随着智能技术的发展,各行各业都走上借助智能技术高效运作道路,财务数据分析也不例外。借助BI商业智能技术能够让财务数据分析更高效、便捷、直观立体,也更有助于发挥财务数据分析作为企业经营管理健康晴雨表的作用。随着BI财务数据分析经验的…...

Android12之com.android.media.swcodec无法生成apex问题(一百六十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

Xcode build和version

参考 一个叫做Version,一个叫做Build,(version是版本号,build是打正式包每次Archive时的都增加的值)这两个值都可以在Xcode中选中target,点击“Summary”后看到。 Version在plist文件中的key是“CFBundleSh…...

前端面试:【原型链】代码世界的家族传承

嗨,亲爱的代码探险家!在JavaScript的奇妙世界里,有一个令人惊叹的概念,那就是原型链。这个概念就像是代码世界的家族传承,允许对象之间分享属性和方法,让你的代码更加高效和灵活。 1. 什么是原型链&#xf…...

2D应用开发是选择WebGL 还是选择Canvas?

推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 在介绍WebGL和Canvas的区别和联系之前,需要先了解它们各自的定义和特点。 WebGL是一种基于标准HTML5的技术,用于在Web浏览器中实时渲染3D图形。它是由Khronos Group开发的一套…...

Android Framework 常见解决方案(20)UDP广播无效问题

1 现象描述和原理解读 该问题同时存在于android App和Framework系统中。最终效果是在Android系统中直接使用UDP广播无效,有意思的是有的android系统可以,有的Android 系统不行。然而该部分代码自己在Linux上测试时是有效的,代码不变&#xf…...

VINS-Mono中的边缘化与滑窗 (4)——VINS边缘化为何是局部变量边缘化?

文章目录 0.前言1.系统构建1.1.仿真模型1.2.第一次滑窗优化1.3.第二次全局优化 2.边缘化时不同的舒尔补方式2.1.边缘化时舒尔补的意义2.2.不同的边缘化方式 3.边缘化时不同的舒尔补方式实验验证3.1.全局schur的操作方式3.2.VIO或VINS中局部边缘化的方式3.3.两种方式和全局优化方…...

真·VB.NET彻底释放Interop.Excel对象

使用 Microsoft.Office.Interop.Excel 虽然有速度慢的缺点;但是作为自带引用,兼容性最好,而且是COM对象模型也很熟悉(Excel里直接录个宏,很方便把VBA代码转成VB.NET)。所以处理几百上千条的小数据时还是很方便的。 而 Microsoft.…...

记录hutool http通过代理模式proxy访问外面的链接

效果: 代码: public class TestMain {public static void main(String[] args){HttpRequest httpRequest HttpRequest.get("https://www.youtube.com").timeout(30000);httpRequest.setProxy(new Proxy(Proxy.Type.HTTP,new InetSocketAddre…...

Selenium 自动化 | 案例实战篇

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站&#xf…...

前端技术栈es6+promise

let入门使用、 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>let 基本使用</title><script type"text/javascript">let name "hspedu教育";//老韩解读//1. conso…...

windows vscode使用opencv

1.windows vscode使用opencv 参考&#xff1a;https://blog.csdn.net/zhaiax672/article/details/88971248 https://zhuanlan.zhihu.com/p/402378383 https://blog.csdn.net/weixin_39488566/article/details/121297536 g -g .\hello_opencv.cpp -stdc14 -I E:\C-software\…...

json文件读取数据报错 AttributeError: ‘str‘ object has no attribute ‘items‘

trans_width_table表如下&#xff1a; {frozenset({2}): {3: 250, 2.5: 100, 1.5: 25, 2: 50, 1.8: 50, 2.75: 200, 5: 350, 4: 350, 2.3: 100, 4.5: 350, 3.5: 300}, frozenset({1, 3, 4, 5}): {2.5: 75, 2.75: 100, 1.5: 25, 4: 300, 3.5: 200, 4.5: 300, 3: 100, 5: 300, 2…...

dingtalk-openclaw-connector:打通钉钉与AI的插件化连接器架构解析

1. 项目概述&#xff1a;一个打通钉钉与AI能力的“连接器”如果你正在企业内部尝试部署AI应用&#xff0c;比如一个能自动处理工单的智能客服&#xff0c;或者一个能帮你分析周报的智能助手&#xff0c;那么你大概率会遇到一个核心难题&#xff1a;如何让AI能力无缝融入员工每天…...

OpenGL 调试方式

调试手段总览 API 级错误检查&#xff1a;glGetError、断言、包装宏调试输出机制&#xff1a;GL_KHR_debug、glDebugMessageCallback、QOpenGLDebugLogger着色器与程序调试&#xff1a;编译/链接日志、离线编译器、颜色编码调试渲染结果调试&#xff1a;FBO 检查、glReadPixels…...

量子通信中的级联环图码技术解析

1. 量子通信与量子中继器概述量子通信的核心挑战在于量子态在传输过程中极易受到环境噪声和信道损耗的影响。与传统经典通信不同&#xff0c;量子信息无法被简单地放大或复制&#xff08;受限于量子不可克隆定理&#xff09;&#xff0c;这使得长距离量子通信的实现面临巨大困难…...

网络出口IP管理工具ipman:原理、使用与实战指南

1. 项目概述与核心价值最近在折腾网络工具和代理配置时&#xff0c;发现了一个挺有意思的开源项目&#xff0c;叫twisker/ipman。乍一看这个名字&#xff0c;可能会联想到IP地址管理&#xff0c;但实际上&#xff0c;它的定位更偏向于一个轻量级的、用于在特定网络环境下管理和…...

终极指南:如何让微信网页版在浏览器中重新可用

终极指南&#xff1a;如何让微信网页版在浏览器中重新可用 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版无法正常访问而烦恼吗&…...

AI编程助手规则库实战:从通用到专用的效率跃迁

1. 项目概述&#xff1a;当你的光标有了“规矩”最近在逛GitHub的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫“awesome-cursorrules-zh”。光看名字&#xff0c;你可能会有点懵&#xff0c;“Cursor”是那个AI编程工具&#xff0c;“rules”是规则&#xff0c;那…...

TarsCpp协程实现原理:从用户态上下文切换看高性能RPC框架设计

1. 从线程到协程&#xff1a;为什么TarsCpp要拥抱协程&#xff1f;在分布式微服务架构里&#xff0c;我们每天都在和RPC、网络IO、并发处理打交道。传统的多线程模型&#xff0c;一个请求一个线程&#xff0c;逻辑清晰&#xff0c;但线程创建、上下文切换的开销&#xff0c;以及…...

LineageOS 18.1在一加9 Pro上的体验报告:纯净安卓11的续航、性能与Magisk模块搭配

一加9 Pro刷入LineageOS 18.1深度体验&#xff1a;纯净Android 11的终极玩法 当厂商定制系统越来越臃肿时&#xff0c;许多极客用户开始寻找更纯净的安卓体验。LineageOS作为CyanogenMod的精神继承者&#xff0c;一直是刷机爱好者的首选。本文将带您深入体验一加9 Pro刷入Linea…...

书匠策AI:一个让论文小白也能“开挂“的毕业论文神器,到底有多能打?

各位同学&#xff0c;你有没有经历过这种崩溃时刻——毕业论文 deadline 倒计时&#xff0c;你的Word文档里只有标题&#xff0c;脑子里一片空白&#xff0c;选题没思路、大纲理不清、参考文献不会找&#xff0c;甚至连学校格式都搞不明白&#xff1f; 别慌&#xff0c;今天作…...

嵌入式Python库CI/CD实战:Travis CI自动化测试与发布

1. 项目概述与核心价值 如果你正在维护一个开源项目&#xff0c;或者在一个小团队里负责核心模块的开发&#xff0c;那么你一定对“这次改动会不会把别人的代码搞坏”这个问题感到头疼。尤其是在嵌入式开发领域&#xff0c;比如我们常用的CircuitPython库&#xff0c;代码最终要…...