[nats] JetStream
nats JetStream์ nats์ ๊ณต์ ํ์ฅ ์์คํ ์ด๋ค.
์ด๊ฑธ ์ฌ์ฉํ๋ฉด on-disk๋ก ์ ์ฅ๋ผ์ ๋ฐ์ดํฐ์ ์์์ฑ์ ๋ณด์ฅํ ์ ์๊ณ , FIFO ๊ธฐ๋ฐ์ ๋ฉ์ธ์ง ์ฒ๋ฆฌ ๋ฑ Kafka์ ๋๋ฑํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
JetStream ํ์ฑํํ๊ธฐ
๋ณ๋ค๋ฅธ ์ค์ ์ ํ์ง ์๋๋ค๋ฉด JetStream์ ๊บผ์ ธ์๋ค. ์ฐ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ์ผ์ค์ผ ํ๋ค.
์ผ์ ธ์๋์ง ์ฌ๋ถ๋ account info ๋ช ๋ น์ผ๋ก ํ์ธํ ์ ์๋ค.
nats account info
์ด๋ ๊ฒ ๋ผ์๋ค๋ฉด,
๊ธฐ์กด์ nats-server๋ฅผ ์ฃฝ์ธ๋ค์์ -js ์ต์ ์ ์ค์ jetstream ๋ชจ๋๋ก ์ฌ์คํํ๊ฑฐ๋
nats-server -js

๊ณต์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋งจ ์ค๋ฅธ์ชฝ์ ์ถ๊ฐ ๋ช ๋ นํ ์ธ์ -js๋ฅผ ๋์ ธ์ฃผ๋ฉด ๋๋ค.
docker run -idt --name nats --network nats --rm -p 4222:4222 -p 8222:8222 nats:2.9.15-alpine3.17 --http_port 8222
๊ทธ๋ ๊ฒ ํด์, ์ด๋ฐ์์ผ๋ก JetStream account ์ ๋ณด๊ฐ ์กฐํ๋๋ฉด, ์ ๋ ๊ฒ์ด๋ค.

์คํธ๋ฆผ ๋ง๋ค๊ธฐ
์ด๋ฒ์๋ ์คํธ๋ฆผ์ ๋ง๋ค์ด๋ณด๊ฒ ๋ค.
์คํธ๋ฆผ์ ํ๋์ ๊ณ ์ ํ ํ ๋จ์๋ค. ์ฌ๊ธฐ์๋ค ๋ฉ์ธ์ง๋ฅผ ๋ฃ์ผ๋ฉด ์ปจ์๋จธ๊ฐ ๊บผ๋ด์ฐ๋ ๊ตฌ์กฐ๊ฐ ๋๋ค.
stream add ๋ช ๋ น์ ์น๊ณ , ์ต์ ์ ๋ํํ์ผ๋ก ๊ณจ๋ผ์ค๋ค.
nats --server nats://localhost:4222 stream add test_stream

์ผ๋ฐ์ ์ธ ์นดํ์นด์ฒ๋ผ FIFO ํ๋ก ์ฐ๊ณ ์ถ๋ค๋ฉด, ๊ทธ๋ฅ ๋ค ๋ํดํธ ์ต์
๋ง ์ค๋ ๋ฌด๋ฐฉํ๋ค.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ค.
nats --server nats://localhost:4222 stream info test_stream

consumer ๋ง๋ค๊ธฐ
stream๋ง ์์ด์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋๊ฒ ๋ถ๊ฐ๋ฅํ๋ค.
consumer๋ stream์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ์ ์๊ฒ ํด์ฃผ๋ ์ธํฐํ์ด์ค๋ค. ์ด consumer ๋จ์๋ฅผ ์ด์ฉํด์ ์ฝ์ ๊ฒ๊ณผ ์ฝ์ง ์์ ๊ฒ์ ๊ตฌ๋ถํ ์ ์๋ค.
์ด๊ฒ๋ stream์ฒ๋ผ ๋ํํ์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
nats consumer add

๋ฉ์ธ์ง ์ฃผ๊ณ ๋ฐ๊ธฐ
stream๋ consumer๋ ๋ค ๋ง๋ค์๋ค๋ฉด, ํ๋ฒ ํํ์ ํด๋ณด์.
๋ฉ์ธ์ง๋ฅผ ๋์ง๋๊ฑด ์๋์ ๊ฐ์ ํํ๋ก ํ ์ ์๋ค.
nats pub [subject] [๋ฉ์ธ์ง]nats pub test "test 1"
nats pub test "test 4"
nats pub test "test 3"
nats pub test "test 2"

๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ consumer๋ฅผ ํตํด์ ์์ฐจ์ ์ผ๋ก ์ฝ์ด์ฌ ์ ์๋ค.
nats consumer next [stream] [consumer] --count [๊ฐ์ ธ์ฌ๊ฐ์]nats consumer next test_stream test_consumer --count 1000


Discard Policy๊ฐ Old(FIFO)์ด๊ธฐ ๋๋ฌธ์, ํ๋์ฉ ์ฝ์ด์๋ ๋จผ์ ์์ธ๊ฒ์ ํ๋์ฉ ๊ฐ์ ธ์จ๋ค.


๊ทธ๋ ๋ค.
์ฐธ์กฐ
JetStream Walkthrough - NATS Docs
Streams - NATS Docs
์๋น์ - NATS Docs