惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
V
Visual Studio Blog
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MongoDB | Blog
MongoDB | Blog
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
L
LangChain Blog
Martin Fowler
Martin Fowler
GbyAI
GbyAI
博客园 - 司徒正美

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
[开源] 写一次代码,适配 6 种 MQ? Go 统一消息中间件适配层...
lixikei · 2026-01-20 · via V2EX

在 Go 业务开发中,我们经常遇到这样的场景:

  • 环境切换:本地开发用 NATS 或 RabbitMQ 贪图轻快,线上却要接入 Kafka 或 AWS SQS 。
  • 代码耦合:业务逻辑被底层 MQ 的 SDK 对象(如 *rocketmq.Producer)绑定,一旦想换驱动,几乎要重写整个消息发送逻辑。
  • 配置坑多:每个 MQ 的参数设置五花八门,一不小心传错了参数,程序却静默运行,等到上线出事才发现配置没生效。

为了解决这些痛点,我发起了 Unified MQ Broker for Go 项目。它就像是 MQ 领域的 "DBAL"(类似于 SQL 领域的 GORM 或数据库驱动层),让你通过一套 API 就能无缝切换多种消息中间件。

🚀 v0.2.0 重磅更新

经过一段时间的打磨,我们刚刚发布了 v0.2.0 版本。这次更新不只是增加了驱动,更是在“健壮性”和“性能”上做了深度优化:

1. 🛡️ 独创“选项追踪” (Option Tracking)

  • 痛点:如果你给 Kafka 传了一个 SQS 的 DeduplicationID,大部分 SDK 会选择静默忽略。
  • 方案:v0.2.0 引入了审计机制。如果底层适配器没有读取你传入的某个配置项,系统会在连接或发布时发出显式警告。彻底告别因拼写错误或参数误用导致的配置无效。

2. ⚡ 高性能“智能序列化” (Smart Serialization)

  • 优化:针对原始 []bytestring 数据实现了零拷贝路径,跳过冗余的 json.Marshal
  • 战果:压测显示,在高吞吐场景下,序列化性能提升了 5 倍以上(单次操作仅需 ~16ns )。

3. 🏗️ 延迟绑定 (Late Binding)

  • NewBroker 现在仅做静态配置。
  • 真正的网络 IO 、TCP 建连和 SDK 初始化全部推迟到 Connect() 时执行,方便与依赖注入框架(如 Wire )集成。

4. 🌐 全平台支持

目前已完美支持:RocketMQ, Kafka, RabbitMQ, NATS, AWS SQS, GCP Pub/Sub


💻 核心代码预览

无论底层是哪种 MQ ,你的业务代码只需要关心这一套统一逻辑:

import "github.com/qvcloud/broker"

// 切换驱动只需要换一行初始化,业务代码 0 改动
b := rabbitmq.NewBroker(broker.Addrs("amqp://..."))
b.Connect()

// 注入统一的中间件(如 OpenTelemetry 链路追踪)
b.Init(broker.Middleware(otel.Middleware))

// 统一的订阅 API
b.Subscribe("orders.created", func(ctx context.Context, event broker.Event) error {
    fmt.Println("收到订单:", string(event.Message().Body))
    return nil // 返回 nil 自动 Ack ,返回 error 自动 Nack/Retry
})

// 统一的发布 API
b.Publish(context.Background(), "orders.created", &broker.Message{
    Body: []byte(`{"id": 1001}`),
})

传送门

GitHub: https://github.com/qvcloud/broker

  • 核心理念: 接口驱动、高性能、原生支持 OpenTelemetry 。

如果你也深受 MQ 适配之苦,或者想为你的分布式系统寻找一个更规范的通信抽象,欢迎来试用、吐槽或贡献代码!如果你觉得不错,给个 Star 就是最大的支持。 🌟