# 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#
