NATS!
개요
https://docs.nats.io/ https://github.com/nats-io/nats-server
go 로 개발된 메세지 스트리밍 서비스
Kafka
나 RabbitMQ
와 같이 구독/발행 구조의 메세지 브로커 역할을 하지만
최근에 만들어진만큼 많은 플러그인들과 부가적인 기능을 제공한다.
Kafka
의 콜드 스토리지 기능이나 각종 플러그인 설치를 통해 MQTT
, Websocket
, LoadBalancing
등의 기능이 지원된다.
타사 메세지 브로커들의 장점을 모아 개발되었다 보인다.
Kafka
와 RabbitMQ
를 어뎁터를 통해 연동할 수 있다.
토픽
일반적인 토픽 구성은 영숫자를 사용하는 것을 권장 a-z, A-Z, 0-9
와일드카드 역할을 하는 특수문자 또한 제공됨
.
: 토픽 구분
*
: 한 토픽 단위에 대한 와일드카드 (for Matching A Single Token)
>
: 이하 모든 토픽 단위에 대한 와일드 카드 (for Matching Multiple Tokens)
*.*.east.>
믹싱 가능
$SYS
, $JS
, $KV
예약어
메세지 구조
- 주제
- 페이로드 (byte array)
- 헤더 필드
- reply address(선택사항)
메세지 기본크기는 설정에 max_payload=1MB 로 지정되어 있지만 64MB 까지 확장 가능하다. 8MB 이하를 권장함
Jetstream
메세지 안정성을 추구하기 위한 개념으로 STAN aka 'NATS Streaming'
의 후속 개념이다.
Jetstream
을 한문장으로 built-in distributed persistence system(분산 지속형 시스템)
으로 부르며
메세지 스트리밍 기술의 여러 특수한 기능들을 모두 지원한다고 쓰여있다.
MQTT
기능, Kafka
의 콜드 스토리지를 통한 메세지 재전송 기능 역시 Jetstream
기능에 속한다.
설치
서버와 클라이언트 설치를 소개한다.
서버
brew install nats-server
$ docker pull nats
$ docker run --name nats \
-p 4222:4222 \
-p 8222:8222 \
nats --http_port 8222
CLI client
brew tap nats-io/nats-tools
brew install nats-io/nats-tools/nats
테스트
$ nats sub msg.test # Terminal1 구독
$ nats pub msg.test nats-message-1 # Terminal2 발행
$ nats pub msg.test "NATS MESSAGE 2" # Terminal2 발행
배치 테스트: https://docs.nats.io/using-nats/nats-tools/nats_cli/natsbench
데모코드
스프링부트에서 nats 를 사용하는 방법
https://www.baeldung.com/nats-java-client https://github.com/Kouzie/spring-boot-demo/tree/main/nats-demo