프로그래밍/RabbitMQ

[RabbitMQ] 스트림

Victory_HA 2023. 9. 5. 09:27

RabbitMQ Stream

Stream 장점

Large fan-outs

  • 여러 애플리케이션이 동일한 메시지를 읽어야 할 때 유용합니다.
  • 기존의 큐를 사용하면 각 애플리케이션마다 큐를 선언하고 각각에게 동일한 메시지의 복사본을 전달해야 합니다.
  • Stream은 여러 소비자가 동일한 큐에서 동일한 메시지를 비파괴적인 방식으로 소비할 수 있도록 해주므로 여러 개의 큐를 바인딩할 필요가 없습니다.

    Replay / Time-travelling

  • 소비자는 스트림의 어느 지점에서든 절대 오프셋 또는 타임스탬프를 사용하여 연결할 수 있으며 동일한 데이터를 읽고 다시 읽을 수 있습니다.
    • 다시 말해서 메시지가 디스크에 저장되므로 언제든지 메시지를 가져와 소비할 수 있습니다.

Throughput Performance

  • Stream은 기존의 큐에 비해 몇 배 빠릅니다.(?)

Large logs

  • Stream은 메시지를 디스크에 저장합니다.

sample

  • 큐 생성
ConnectionFactory factory = new ConnectionFactory();
var connection = factory.CreateConnection();
var channel = connection.CreateModel();
var argument = new Dictionary<string, object> { { "x-queue-type", "stream" } };

//큐 생성
channel.QueueDeclare(
                queue: qName1,
                durable: false,
                exclusive: false,
                autoDelete: false,
                arguments: argument    
                );
  • stream 설정
    • x-max-length-bytes : 스트림의 최대 크기를 바이트 단위로 설정합니다.
    • x-max-age : 스트림의 최대 수명을 설정합니다.
    • x-stream-max-segment-size-bytes : 스트림은 디스크에서 고정 크기 세그먼트 파일로 나뉩니다. (Default : 500000000 bytes)