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

Go语言消息队列事务:Exactly-Once与At-Least-Once语义

Go语言消息队列事务Exactly-Once与At-Least-Once语义1. 消息语义消息队列有三种传递语义At-Most-Once最多一次、At-Least-Once至少一次和Exactly-Once恰好一次。type DeliverySemantics int const ( AtMostOnce DeliverySemantics 1 AtLeastOnce DeliverySemantics 2 ExactlyOnce DeliverySemantics 3 )2. At-Least-Once实现At-Least-Once需要消费者进行消息确认。type AtLeastOnceConsumer struct { consumer *RabbitMQConsumer processed map[string]bool mu sync.RWMutex } func NewAtLeastOnceConsumer(consumer *RabbitMQConsumer) *AtLeastOnceConsumer { return AtLeastOnceConsumer{ consumer: consumer, processed: make(map[string]bool), } } func (c *AtLeastOnceConsumer) Process(ctx context.Context, handler func([]byte) error) error { return c.consumer.ConsumeWithContext(ctx, func(msg []byte) error { msgID : generateMsgID(msg) c.mu.RLock() if c.processed[msgID] { c.mu.RUnlock() return nil } c.mu.RUnlock() if err : handler(msg); err ! nil { return err } c.mu.Lock() c.processed[msgID] true c.mu.Unlock() return nil }) } func generateMsgID(msg []byte) string { h : fnv.New32a() h.Write(msg) return fmt.Sprintf(%d-%d, time.Now().UnixNano(), h.Sum32()) }3. Exactly-Once实现Exactly-Once需要生产者和消费者配合通过事务和幂等性保证。type ExactlyOnceProducer struct { producer *RabbitMQProducer txn *amqp.Tx } func (p *ExactlyOnceProducer) PublishWithTransaction(ctx context.Context, routingKey string, body []byte) error { if p.txn nil { tx, err : p.producer.conn.Channel().Tx() if err ! nil { return err } p.txn tx } err : p.producer.conn.Channel().PublishWithContext( ctx, p.exchange, routingKey, false, false, amqp.Publishing{ ContentType: application/json, Body: body, DeliveryMode: amqp.Persistent, }, ) if err ! nil { p.txn.Rollback() return err } return p.txn.Commit() } type IdempotentHandler struct { storage map[string]bool mu sync.RWMutex } func NewIdempotentHandler() *IdempotentHandler { return IdempotentHandler{ storage: make(map[string]bool), } } func (h *IdempotentHandler) Handle(msgID string, handler func() error) error { h.mu.RLock() if h.storage[msgID] { h.mu.RUnlock() return nil } h.mu.RUnlock() if err : handler(); err ! nil { return err } h.mu.Lock() h.storage[msgID] true h.mu.Unlock() return nil }4. 总结本文介绍了At-Least-Once和Exactly-Once消息语义的实现方法开发者应根据业务需求选择合适的传递语义。

相关文章:

Go语言消息队列事务:Exactly-Once与At-Least-Once语义

Go语言消息队列事务:Exactly-Once与At-Least-Once语义 1. 消息语义 消息队列有三种传递语义:At-Most-Once(最多一次)、At-Least-Once(至少一次)和Exactly-Once(恰好一次)。 type Del…...

Go语言消息队列监控:指标采集与告警

Go语言消息队列监控:指标采集与告警 1. 监控指标 消息队列系统需要监控的指标包括队列深度、消费延迟、消息吞吐量、错误率等。 package mqmonitorimport ("context""sync""time""github.com/prometheus/client_golang/promethe…...

终极魔兽争霸3兼容性解决方案:WarcraftHelper一键解决Windows 11运行难题

终极魔兽争霸3兼容性解决方案:WarcraftHelper一键解决Windows 11运行难题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3是一款…...

3步配置PUBG绝地求生罗技鼠标压枪宏:新手快速上手终极指南

3步配置PUBG绝地求生罗技鼠标压枪宏:新手快速上手终极指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为PUBG绝地求生中难以…...

Xbox成就解锁器完整指南:免费开源工具助你轻松获取全成就

Xbox成就解锁器完整指南:免费开源工具助你轻松获取全成就 【免费下载链接】Xbox-Achievement-Unlocker Achievement unlocker for xbox games (barely works but it does) 项目地址: https://gitcode.com/gh_mirrors/xb/Xbox-Achievement-Unlocker 还在为那些…...

终极视频加速指南:如何使用Video Speed Controller提升学习与工作效率

终极视频加速指南:如何使用Video Speed Controller提升学习与工作效率 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 在当今信息爆炸的时代,视频已成为…...

Godot 4 Importality插件:实现Blender文件直接导入,革新3D资产工作流

1. 项目概述与核心价值最近在Godot社区里,一个名为nklbdev/godot-4-importality的项目引起了我的注意。乍一看这个标题,你可能和我最初一样有点摸不着头脑——“Importality”是什么?但当你点开仓库,看到它的描述“A Godot 4 plug…...

LLM4RS开源项目:用ChatGPT做推荐系统排序任务的评估框架与实践指南

1. 项目概述:当大语言模型遇上推荐系统最近几年,大语言模型(LLM)的能力边界一直是业界探索的热点。从写诗作画到代码生成,大家似乎都在好奇:它还能做什么?作为一个长期混迹在推荐系统领域的老兵…...

车载以太网之要火系列 - 番外篇4:从DoIP到SOME/IP,一个初学者的“越级碰瓷”

写在开篇今晚有点晚,来不及学多少了,但还得来凑点字数。DoIPUDS的35篇笔记,终于边学边写,搞完了。从第21篇到第35篇,说实话,学得并不轻松。有些地方到现在还是迷迷糊糊的——比如27服务那几级权限&#xff…...

人工智能日报。今日 AI 重要动态 · 2026.05.08

📰 今日 AI 重要动态 2026.05.08 1. 🤖 Claude 主动助手 Orbit 功能曝光 事件: Anthropic 的 Claude 主动助手功能「Orbit」本周被技术情报站 testingcatalog 从客户端代码中挖掘曝光。Orbit 不需要用户发起对话,会在后台持续运…...

ncmdumpGUI:3分钟解锁网易云音乐NCM格式的终极指南

ncmdumpGUI:3分钟解锁网易云音乐NCM格式的终极指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#xf…...

CANN数学算子库变更日志

CHANGELOG 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 本文档记录各版本的重要变更,版本按时间倒序排列。 v8.5.0-beta.1 发布日期:2…...

5分钟快速上手:免费开源词库转换工具完整使用教程

5分钟快速上手:免费开源词库转换工具完整使用教程 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 深蓝词库转换器是一款功能强大的开源免费输入法词库转换…...

实用指南:Video DownloadHelper CoApp的高效配置与使用技巧

实用指南:Video DownloadHelper CoApp的高效配置与使用技巧 【免费下载链接】vdhcoapp Companion application for Video DownloadHelper browser add-on 项目地址: https://gitcode.com/gh_mirrors/vd/vdhcoapp Video DownloadHelper CoApp是一款功能强大的…...

谷歌:解耦同步提升训练韧性

📖标题:Decoupled DiLoCo for Resilient Distributed Pre-training 🌐来源:arXiv, 2604.21428v1 🛎️文章简介 🔸研究问题:如何在大规模语言模型预训练中打破严格的同步屏障,以解决因…...

AI Agent技能库标准化实践:提升开发效率与跨平台兼容性

1. 项目概述:AI Agent技能库的标准化实践 如果你和我一样,每天都在和Claude Code、Cursor这类AI编程工具打交道,那你肯定遇到过这样的场景:想让AI帮你分析一个PDF文件,或者写个SQL优化建议,结果发现每次都…...

照片去背景的方法有哪些?2026年最全工具对比指南

最近身边好多朋友问我:"怎样才能快速给照片去掉背景?"无论是做证件照、电商产品图,还是准备社交媒体素材,去背景这个需求几乎每个人都会遇到。我自己用过十来个工具,今天就把这几年的经验整理出来&#xff0…...

蜂鸟v2 E203:开源RISC-V MCU SoC架构解析与FPGA开发实战

1. 项目概述:从开源蜂鸟E203到蜂鸟v2 E203的演进如果你对RISC-V处理器设计、嵌入式系统开发,或者单纯想找一个能跑在FPGA上的、五脏俱全的开源MCU SoC来学习,那么“蜂鸟v2 E203”(Hummingbirdv2 E203)这个项目绝对值得…...

为AI编程助手注入领域知识:Kumo平台Markdown知识库集成指南

1. 项目概述:一个为LLM编码工具注入Kumo平台知识的“外挂大脑”如果你正在使用Claude Code、Cursor或者Codex这类AI编程助手来处理数据科学或机器学习项目,尤其是涉及到Kumo这个预测性机器学习平台的工作,那么你很可能遇到过这样的瓶颈&#…...

Windows 11安装完全指南:使用MediaCreationTool.bat轻松绕过硬件限制

Windows 11安装完全指南:使用MediaCreationTool.bat轻松绕过硬件限制 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool…...

Python量化投资终极指南:免费快速获取同花顺问财数据的完整解决方案

Python量化投资终极指南:免费快速获取同花顺问财数据的完整解决方案 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 在量化投资的世界里,数据获取往往是最耗时耗力的环节。想象一下&#x…...

绝地求生罗技鼠标宏终极指南:三步实现智能压枪的完整教程

绝地求生罗技鼠标宏终极指南:三步实现智能压枪的完整教程 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 你是否在绝地求生&#xff…...

3分钟解锁B站宝藏:哔哩下载姬让你的视频收藏从未如此简单

3分钟解锁B站宝藏:哔哩下载姬让你的视频收藏从未如此简单 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&am…...

如何让老旧安卓电视流畅看直播?MyTV-Android的3大技术突破方案

如何让老旧安卓电视流畅看直播?MyTV-Android的3大技术突破方案 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 还在为家中老旧智能电视卡顿、闪退而烦恼吗?&#x…...

企业内网系统通过Taotoken统一网关安全调用外部大模型API

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内网系统通过Taotoken统一网关安全调用外部大模型API 在企业级应用开发中,引入大模型能力已成为提升产品智能水平的…...

一句话搞定 PDF/Word/PPT全格式解析!AI 帮你从零搭建专属知识体系!

兄弟们,相信大家都尝试过各种各样的 Claw 了吧,OpenClaw、QClaw 等等,这些Agent 确实掀起了一股全民 AI 的热潮。 然而,我一直在思考一个问题,既然大模型精通世界上所有的知识,那么,我们人类最…...

如何快速掌握XUnity.AutoTranslator:游戏玩家的终极翻译解决方案

如何快速掌握XUnity.AutoTranslator:游戏玩家的终极翻译解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因为语言障碍而错过了精彩的游戏剧情?是否在面对外语游戏…...

Postman面试问题

Postman在工作中使用流程是什么样的? Postman是一款功能强大的接口测试工具 ,它可以帮助开发者和测试者快速地构建、发送、调试和管理各种类型的接口请求。Postman在工作中使用流程大致如下: 根据接口用例所属的模块或功能,新建集…...

不碰内核源码也能“改“内核?聊聊 ftrace 函数挂钩那点事儿

一、先整明白:这技术到底在干嘛? 咱们平时写的程序,调个 printf、发个网络请求,底层其实都在麻烦操作系统内核帮忙干活。内核里有一大堆"服务窗口"——也就是系统调用,比如 clone(创建进程&#…...

大模型面试题:办公 Agent 的意图识别模块核心痛点是什么?怎么解决?

在办公 Agent 里,意图识别不是简单地判断用户“想干什么”,而是要判断:用户现在想做什么、缺什么信息、能不能直接调用工具、是否存在风险、要不要追问、当前任务和历史上下文是什么关系。很多候选人回答这类问题时,只会说“用 LL…...