Skip to content

一家公司的 Agent 通信:mq9 的真实场景 ​

设想一个场景 ​

假设一家公司有很多 Agent。

有负责数据分析的 Agent,有负责报告生成的 Agent,有负责客户服务的 Agent,有负责审批的 Agent,有跑在边缘设备上的 Agent,还有负责编排调度的 Orchestrator Agent。它们各司其职,需要协作。

这些 Agent 之间的通信,无非就两种:

实时通信——我问你一个问题,你立刻回答我。双方都在线,一问一答。

异步通信——我给你发个任务,你什么时候做完什么时候回我。你不在线也没关系,消息等着你。

今天大部分公司怎么做?实时通信走 HTTP 调用,异步通信用 Redis + Kafka + 自研队列拼凑。两套体系,各自运维,中间还要写胶水代码对接。


如果有 mq9 ​

部署一个 RobustMQ,mq9 就位。所有 Agent 通信走同一套协议。

Orchestrator 分发任务给 Worker Agent:

bash
nats pub '$mq9.AI.INBOX.worker-001.normal' '{"type":"task","content":"分析Q3数据"}'

Worker 在线就实时收到,不在线消息在邮箱等着。Orchestrator 不需要关心 Worker 在不在线,发出去就继续做别的事。

Worker 完成任务,结果回传:

bash
nats pub '$mq9.AI.INBOX.orchestrator.normal' '{"type":"task_result","result":"异常率2.3%"}'

Orchestrator 订阅着自己的邮箱,结果来了就处理。

紧急告警广播:

监控 Agent 发现异常,不知道谁来处理,广播出去:

bash
nats pub '$mq9.AI.BROADCAST.system.anomaly' '{"level":"critical","detail":"支付超时率15%"}'

订阅了 $mq9.AI.BROADCAST.*.anomaly 的 Agent 自动收到,各自响应。

需要人工审批:

Agent 遇到需要人判断的事情,发到审批员邮箱:

bash
nats pub '$mq9.AI.INBOX.approver-zhang.urgent' '{"type":"approval","content":"申请调用外部API"}'

审批员空了打开邮箱,审批完结果发回 Agent 邮箱。人和 Agent 用同一套协议。

边缘设备离线:

云端给边缘 Agent 发指令,边缘断网了:

bash
nats pub '$mq9.AI.INBOX.edge-001.urgent' '{"command":"emergency_stop"}'

消息在邮箱持久化等着。边缘设备联网后,urgent 先处理,normal 后处理。QUERY 兜底拉取确保不遗漏。

能力发现:

新来一个 Agent,不知道公司里谁有数据分析能力:

bash
nats pub '$mq9.AI.BROADCAST.capability.query' '{"need":"data.analysis"}'

有能力的 Agent 响应到查询方邮箱。去中心化,不需要注册中心。


一套通吃 ​

你会发现,上面所有场景——实时的、异步的、点对点的、广播的、人机混合的——全部用同一套 mq9 协议,四个命令字:

MAILBOX.CREATE              — 申请邮箱
MAILBOX.QUERY.{mail_address}    — 查未读消息
INBOX.{mail_address}.{priority} — 点对点通信
BROADCAST.{domain}.{event} — 公共广播

不需要实时通信走 HTTP、异步通信走 Kafka、广播走 Redis。一套 mq9 全部覆盖。

为什么能做到?因为 mq9 基于 pub/sub 的 push 模型——对方在线,消息推过去,实时到达,延迟在毫秒级;对方不在线,消息先写存储,等对方上线再推。实时和异步不是两套机制,是同一套机制在不同状态下的表现。

业务侧不需要区分"这个场景该用同步还是异步"。发消息就行,mq9 自动处理:在线就实时推,离线就存着等。


跟 A2A 的关系 ​

如果公司用了 A2A(Google 的 Agent2Agent 协议)来定义 Agent 之间的对话语义——Task 结构、能力声明、状态更新——那 mq9 就是 A2A 的传输层。

A2A 定义 Agent 之间怎么对话,mq9 保证对话送达。

A2A 自己决定什么时候同步、什么时候异步,mq9 不关心。A2A 的 Task JSON 就是 mq9 邮箱里的 payload,mq9 不解析它,只投递。

甚至可以更简单——如果 mq9 的实时推送延迟对业务够用,公司内部 Agent 的所有通信全走 mq9,A2A over HTTP 都不需要。一套传输层通吃同步和异步,架构最简。


本质 ​

回到最根本的一点。

消息队列做了二十年的事情,本质上就是异步通信。mq9 不是在发明新东西,是把异步通信这件最基本的事情,在 Agent 场景下做到位。

发出去,对方收得到。离线不丢,有优先级,用完自动清理。在线的时候实时推,不在线的时候存着等。

mq9 只是把 Agent 的异步通信做好而已。

mq9 就是为了解决 Agent 的异步通信问题而生的。

🎉 既然都登录了 GitHub,不如顺手给我们点个 Star 吧!⭐ 你的支持是我们最大的动力 🚀