Skip to content

常见问题 ​

使用 mq9 需要特殊 SDK 吗? ​

不需要。任何 NATS 客户端都可以直接使用——Go、Python、Rust、JavaScript、Java、.NET 或 NATS CLI。mq9 是在 NATS 之上定义的 subject 命名约定,所有操作均通过 NATS request/reply 完成。RobustMQ SDK 提供类型化封装和异步模式,但完全是可选的。


发送消息时接收方不在线会怎样? ​

消息立即写入服务端存储。接收方随时可以调用 FETCH 拉取——哪怕几分钟或几小时后——所有未过期消息会按优先级顺序返回。消息不会因接收方离线而丢失。


FETCH 和 QUERY 有什么区别? ​

FETCH($mq9.AI.MSG.FETCH.*)是消费操作,配合 group_name 时 broker 会记录消费位点,ACK 后推进,下次 FETCH 从断点续拉,不重复消费。

QUERY($mq9.AI.MSG.QUERY.*)是查询操作,返回邮箱中当前存储的消息,不影响消费位点,可按 key、tags、since 过滤。两次 QUERY 返回相同结果(消息没有变化时),适合调试和状态检视。


可以在创建后修改邮箱的 TTL 吗? ​

不可以。TTL 在创建时固定,不可更改,也不可续期。重复以相同名称 CREATE 会返回错误(mailbox xxx already exists)。要更改 TTL,必须等邮箱过期后以新值重新创建。


邮箱过期后会发生什么? ​

邮箱及其所有消息自动销毁,无需客户端清理。消费组的位点记录也随之清除。过期时不会向客户端发送任何通知。


可以有多个 Agent 向同一邮箱写入吗? ​

可以。任何知道 mail_address 的 Agent 都能发送消息,没有发送方白名单或所有权限制。私有邮箱通过保密 mail_address 实现访问控制;公开邮箱则任何知道名称的 Agent 都能发送。


多个 Worker 如何竞争消费同一邮箱? ​

多个 Worker 使用相同的 group_name 调用 FETCH,broker 保证每条消息只被其中一个 Worker 拿到(通过消费位点推进实现)。Worker 各自独立调用 FETCH,处理完后 ACK,broker 推进位点后该消息不会再被其他 Worker 重复消费。

Worker 可以随时加入或退出,位点由 broker 维护,无需客户端协调。


ACK 的 msg_id 应该传哪个值? ​

传本次 FETCH 返回的最后一条消息的 msg_id。broker 会将该 group 的消费位点推进到此 msg_id,之后的 FETCH 从这里续拉。不需要对每条消息单独 ACK——一次 ACK 确认本批所有消息。


重连后优先级如何工作? ​

有状态消费(传 group_name):重连后调用 FETCH,broker 从上次 ACK 位置续拉,按优先级顺序(critical → urgent → normal)返回未消费消息,同优先级内保持 FIFO 顺序。

无状态消费(不传 group_name):每次 FETCH 按 deliver 策略独立拉取,不记录位点。


mq9 是 MQTT 或 Kafka 的替代品吗? ​

不是。mq9 专门为 AI Agent 异步通信设计。MQTT 是 IoT 遥测和设备消息的正确选择。Kafka 是高吞吐量事件流和数据管道的正确选择。mq9 解决 Agent 邮箱问题:临时通道、离线容错投递、轻量 TTL 生命周期。三种协议可以在同一个 RobustMQ 部署上同时运行,零桥接。


消息体可以有多大? ​

目前暂无硬性限制。对于超大二进制传输(模型、数据集、文件),建议将数据存储在外部对象存储,在 mq9 消息体中传递引用 URL 或对象键,以保持消息轻量。


不用 RobustMQ 能用 mq9 吗?普通 NATS 服务器可以吗? ​

不可以。mq9 的消息持久化、优先级排序、TTL 自动清理、消费位点管理和 Agent 注册表均在 RobustMQ 服务端内部实现。普通 NATS 服务器不支持这些功能。NATS 客户端库用作传输层,但服务端必须是 RobustMQ。


需要处理哪些错误? ​

所有响应均包含 error 字段,为空字符串表示成功,非空字符串为错误描述。常见错误:

错误描述触发原因
mailbox xxx already exists重复 CREATE 同名邮箱
mailbox not found邮箱不存在或已过期
message not found指定 msg_id 的消息不存在或已过期
invalid mail_addressmail_address 格式不合法(含大写、连字符等)
agent not foundUNREGISTER 或 REPORT 时 Agent 名称不存在

mq9 和 NATS JetStream 有什么区别? ​

JetStream 为 NATS 添加了流式持久化——是一个完整的类 Kafka 系统,包含命名流、持久化消费者、消息序列和重放功能。mq9 针对 Agent 场景做了专门优化:FETCH+ACK pull 消费、三级优先级、消息属性(key/tags/delay/ttl)、内置 Agent 注册表,没有流或 stream 概念。JetStream 更适合大规模事件溯源、审计日志和基于 offset 的重放;mq9 更适合 Agent 间轻量异步通信,TTL 生命周期和零配置比复杂流管理更重要的场景。