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

发表评论 取消回复