---
title: NATS JetStream流存储与消费语义实践
keywords:
- NATS
- JetStream
- Stream
- Consumer
- Ack Policy
- Retention
description: 使用JetStream进行流存储与拉取/推送消费,提供可验证的配置与命令实现可靠处理与保留策略。
date: 2025-11-26
categories:
- 文章资讯
- 技术教程
---
概述
- 目标:通过JetStream管理消息保留与确认语义,支持拉取与推送消费,保障重试与有序处理。
- 适用:事件流、审计日志、订单处理。
核心与实战
- 创建Stream:
nats stream add ORDERS --subjects orders.* --storage file --retention limits --max-msgs=-1 --max-bytes=10GB --discard old
- 创建Consumer(拉取,显式ACK):
nats consumer add ORDERS ORDERS_WORKERS --pull --ack explicit --deliver-policy all --max-deliver 5
- 拉取与ACK:
nats consumer next ORDERS ORDERS_WORKERS --count 10 --ack
- 推送模式(Delivery):
nats consumer add ORDERS ORDERS_PUSH --deliver subject process.orders --ack explicit
nats sub process.orders --ack
示例
- 生产消息:
nats pub orders.created '{"id":"ORD-1","amount":10.5}'
- 观察待处理与重试:
nats consumer info ORDERS ORDERS_WORKERS
验证与监控
- 保留策略与存储:
- 观察
retention与max-deliver影响;查看存储占用与丢弃策略。 - 错误与重试:
- 超过最大投递可路由到DLQ主题;记录失败原因与消息ID。
- 指标:
- JetStream监控消息待处理与已确认数;客户端观察处理延迟与错误率。
常见误区
- 使用自动ACK导致未处理也确认;推送模式需显式ACK。
- 不设
max-deliver造成无限重试;应限次并配合DLQ。 - 保留策略过大导致存储膨胀;需限制
max-bytes与丢弃策略。
结语
- JetStream为NATS提供可靠流存储与消费语义,通过合适的ACK与保留配置可稳定支撑关键事件处理。

发表评论 取消回复