概述
- 目标:通过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与保留配置可稳定支撑关键事件处理。

发表评论 取消回复