NATS!

개요

https://docs.nats.io/ https://github.com/nats-io/nats-server

go 로 개발된 메세지 스트리밍 서비스

nats

KafkaRabbitMQ 와 같이 구독/발행 구조의 메세지 브로커 역할을 하지만 최근에 만들어진만큼 많은 플러그인들과 부가적인 기능을 제공한다.

Kafka 의 콜드 스토리지 기능이나 각종 플러그인 설치를 통해 MQTT, Websocket, LoadBalancing 등의 기능이 지원된다.

타사 메세지 브로커들의 장점을 모아 개발되었다 보인다.

KafkaRabbitMQ 를 어뎁터를 통해 연동할 수 있다.

토픽

일반적인 토픽 구성은 영숫자를 사용하는 것을 권장 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

https://docs.nats.io/nats-concepts/jetstream

메세지 안정성을 추구하기 위한 개념으로 STAN aka 'NATS Streaming' 의 후속 개념이다.

Jetstream 을 한문장으로 built-in distributed persistence system(분산 지속형 시스템) 으로 부르며
메세지 스트리밍 기술의 여러 특수한 기능들을 모두 지원한다고 쓰여있다.

MQTT 기능, Kafka 의 콜드 스토리지를 통한 메세지 재전송 기능 역시 Jetstream 기능에 속한다.

설치

서버와 클라이언트 설치를 소개한다.

서버

brew install nats-server

https://hub.docker.com/_/nats

$ 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

카테고리:

업데이트: