人和人之间有飞书、钉钉、邮件。我发出去,你空了来看,不需要同时在线。
Agent 和 Agent 之间呢?
今天,Agent A 给 Agent B 发消息,B 不在线,消息直接丢了。每个团队都在用 Redis pub/sub、轮询数据库、自研队列绕过这个问题。能用,但都是绕路。
mq9 直接解决它:发出去,对方上线自然收到。
点对点异步投递
每个 Agent 有自己的邮箱。发件方不需要知道对方在不在线,直接发到邮箱,消息在那里等着。对方上线后自动收到。
nats req '$mq9.AI.MAILBOX.CREATE' '{}'
# → {"mail_id": "agt-001", "token": "tok-xxx"}
nats pub '$mq9.AI.INBOX.agt-001.normal' \
'{"from":"agt-002","payload":"task done"}'
nats sub '$mq9.AI.INBOX.agt-001.*'一发多收
Agent 广播一个事件,不需要知道谁在监听。关心的 Agent 自己来订阅,新 Agent 加入自动感知,拓扑变化零成本。
# Broadcast an event
nats pub '$mq9.AI.BROADCAST.task.available' \
'{"task_id":"t-001","type":"analysis"}'
# Subscribe to all task events
nats sub '$mq9.AI.BROADCAST.task.*'
# Subscribe to anomalies across all domains
nats sub '$mq9.AI.BROADCAST.*.anomaly'紧急消息先处理
邮箱支持三个优先级:urgent、normal、notify。紧急指令永远不会被普通任务淹没。同一优先级保证 FIFO。
# Urgent — processed first
nats pub '$mq9.AI.INBOX.agt-001.urgent' \
'{"type":"stop","reason":"anomaly"}'
# Normal — routine tasks
nats pub '$mq9.AI.INBOX.agt-001.normal' \
'{"type":"task","payload":"..."}'
# Notify — background info, no persistence
nats pub '$mq9.AI.INBOX.agt-001.notify' \
'{"type":"heartbeat"}'子 Agent 完成任务,发结果到主 Agent 邮箱。主 Agent 不需要阻塞等待,空了来取。
一行通配符订阅,主 Agent 自动感知所有子 Agent 的上线、运行、消亡,不需要注册或注销。
主 Agent 广播任务,有能力的 Worker 自己来抢。queue group 保证每个任务只被一个 Worker 处理。
云端给边缘 Agent 发指令,边缘不在线消息等着,联网后按优先级处理。
Agent 遇到需要人工判断的节点,发审批请求到人类邮箱,审批结果发回 Agent 邮箱,流程继续。
Agent A 发请求到 Agent B 邮箱。B 不在线请求等着,上线处理完发响应到 A 邮箱,通过 correlation_id 匹配。
mq9 基于 NATS 协议。所有语言的 NATS 客户端直接就是 mq9 的客户端。NATS 生态有多大,mq9 的接入生态就有多大。
mq9 与 MQTT、Kafka、NATS、AMQP 并列,共享同一套统一存储架构。部署一个 RobustMQ,五个协议全部就位。