# Session 21: Streams & Consumers ## Summary Stream and consumer implementations — the core JetStream data plane. Streams store messages; consumers track delivery state and manage acknowledgments. ## Scope | Go File | Features | Feature IDs | Go LOC | |---------|----------|-------------|--------| | server/stream.go | 193 | 3195–3387 | 6,980 | | server/consumer.go | 209 | 584–792 | 5,720 | | **Total** | **402** | | **12,700** | ## .NET Classes - `NatsStream` — stream lifecycle, message ingestion, purge, snapshots (193 features) - `NatsConsumer` — consumer lifecycle, delivery, ack, nak, redelivery (174 features) - `ConsumerAction`, `ConsumerConfig`, `AckPolicy`, `DeliverPolicy`, `ReplayPolicy` — consumer types - `StreamConfig`, `StreamSource`, `ExternalStream` — stream types - `PriorityPolicy`, `RetentionPolicy`, `DiscardPolicy`, `PersistModeType` — policy enums - `WaitQueue`, `WaitingRequest`, `WaitingDelivery` — consumer wait types - `JSPubAckResponse`, `PubMsg`, `JsPubMsg`, `InMsg`, `CMsg` — message types ## Test Files | Test File | Tests | Test IDs | |-----------|-------|----------| | server/jetstream_consumer_test.go | 161 | 1220–1380 | | server/jetstream_leafnode_test.go | 13 | 1403–1415 | | server/norace_1_test.go | 100 | 2371–2470 | | server/norace_2_test.go | 41 | 2471–2511 | | **Total** | **315** | | ## Dependencies - Session 01 (Foundation Types) - Session 02 (Utilities) - Session 08 (Client Connection) - Session 09 (Server Core Part 1) - Session 11 (Accounts) - Session 17 (Store Interfaces) - Session 19 (JetStream Core) ## .NET Target Location - `dotnet/src/ZB.MOM.NatsNet.Server/JetStream/` ## Notes - **This is a multi-sitting session** — 12.7K Go LOC and 315 tests - Suggested sub-batching: - **21a**: Stream/consumer types and enums (~40 features, ~500 LOC) - **21b**: NatsStream core (create, delete, purge — ~95 features) - **21c**: NatsStream remaining (snapshots, sources, mirrors — ~98 features) - **21d**: NatsConsumer core (create, deliver, ack — ~90 features) - **21e**: NatsConsumer remaining (redelivery, pull, push — ~84 features) - **21f**: Tests (315 tests) - `norace_*_test.go` files contain tests that must run without the Go race detector — these may have concurrency timing sensitivities - Consumer pull/push patterns need careful async design in C#