You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于NATS/JetStream默认是否保证消息投递及编码要求的咨询

NATS/JetStream 消息投递保证相关问题解答

默认情况下是否保证消息投递?

默认情况下,NATS/JetStream不保证消息的可靠投递。如果生产者使用普通的NATS发布接口(而非JetStream专属发布API),消息仅会被异步发送,不会等待服务器的持久化确认,一旦网络中断、服务器未及时存储等情况发生,消息就会丢失。

实现可靠投递的编码要求

生产者侧

  • 必须使用JetStream的发布API(例如Go SDK中的js.Publish,Java SDK中的JetStream.publish),并等待服务器返回的确认(Ack)。只有收到Ack,才能确认消息已被持久化到JetStream流中。
  • 处理发布失败场景:若收到NACK(否定确认)、发布超时,需实现重试逻辑,同时可通过设置MsgId实现幂等性,避免重试导致的重复投递。
  • 配置合理的发布参数:比如设置超时时间,防止无限等待;根据业务需求设置流的存储策略(如持久化到磁盘)。

消费者侧

  • 使用JetStream消费者API(推送或拉取模式),消息处理完成后主动发送Ack。若未主动Ack,服务器会在超时后重新投递消息,但如果在处理前就完成Ack(比如自动Ack),可能导致消息在处理失败后丢失。
  • 使用持久化消费者(Durable Consumer):配置持久化名称,服务器会记录消费者的消费进度,重启后可从上次中断的位置继续消费,避免进度丢失。
  • 避免盲目依赖自动Ack:如果开启自动Ack,需确保消息已被完全处理(如业务逻辑执行完成、数据落地成功),否则会引发不可逆的消息丢失。

内容的提问来源于stack exchange,提问作者Kode Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:42:35