From d8318af9c4f066de90df1ab01c711df782e94300 Mon Sep 17 00:00:00 2001 From: Ryan Hamamura <58859899+ryanhamamura@users.noreply.github.com> Date: Mon, 26 Jan 2026 08:10:30 -1000 Subject: [PATCH] feat: add JetStream message replay to chatroom example Replay stored messages from JetStream when joining or switching rooms so users see chat history immediately. --- internal/examples/nats-chatroom/main.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/internal/examples/nats-chatroom/main.go b/internal/examples/nats-chatroom/main.go index 5a00780..9bbdf19 100644 --- a/internal/examples/nats-chatroom/main.go +++ b/internal/examples/nats-chatroom/main.go @@ -146,7 +146,27 @@ func main() { if currentSub != nil { currentSub.Unsubscribe() } - sub, _ := c.Subscribe("chat.room."+room, func(data []byte) { + + // Replay history from JetStream before subscribing for real-time + subject := "chat.room." + room + if hist, err := js.SubscribeSync(subject, nats.DeliverAll(), nats.OrderedConsumer()); err == nil { + for { + msg, err := hist.NextMsg(200 * time.Millisecond) + if err != nil { + break + } + var chatMsg ChatMessage + if json.Unmarshal(msg.Data, &chatMsg) == nil { + messages = append(messages, chatMsg) + } + } + hist.Unsubscribe() + if len(messages) > 50 { + messages = messages[len(messages)-50:] + } + } + + sub, _ := c.Subscribe(subject, func(data []byte) { var msg ChatMessage if err := json.Unmarshal(data, &msg); err != nil { return