
在 Go 业务开发中,我们经常遇到这样的场景:
*rocketmq.Producer)绑定,一旦想换驱动,几乎要重写整个消息发送逻辑。为了解决这些痛点,我发起了 Unified MQ Broker for Go 项目。它就像是 MQ 领域的 "DBAL"(类似于 SQL 领域的 GORM 或数据库驱动层),让你通过一套 API 就能无缝切换多种消息中间件。
经过一段时间的打磨,我们刚刚发布了 v0.2.0 版本。这次更新不只是增加了驱动,更是在“健壮性”和“性能”上做了深度优化:
<3>1. 独创“选项追踪” (Option Tracking)DeduplicationID,大部分 SDK 会选择静默忽略。[]byte 和 string 数据实现了零拷贝路径,跳过冗余的 json.Marshal。NewBroker 现在仅做静态配置。Connect() 时执行,方便与依赖注入框架(如 Wire )集成。目前已完美支持: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
如果你也深受 MQ 适配之苦,或者想为你的分布式系统寻找一个更规范的通信抽象,欢迎来试用、吐槽或贡献代码!如果你觉得不错,给个 Star 就是最大的支持。
1 chennqqi 1 月 20 日 有点意思,不过似乎一般中写个 adapter 或者让 AI 写一个也不难,但有直接可用的了,点赞! |
2 best9999 1 月 20 日 via iPhone 没有指定开源协议,是保留一切权利吗? |
3 misaka19000 1 月 20 日 这种没经过长时间线上考验的库,谁敢用 |
4 Need4more 1 月 20 日 用 java 的 spring cloud stream 吧,很成熟了 |
5 Dganzh 1 月 21 日 不支持 Redis ? |