RabbitMQ의 지속성 메커니즘에는 큐 지속성, 메시지 지속성 및 익스체인지 지속성이 포함되어 있습니다. 메시지가 지속적인지 여부에 관계없이 디스크에 쓰일 수 있습니다.

지속적인 메시지는 디스크와 메모리 양쪽에 쓰이며(읽기 속도를 높이기 위해), 비지속적인 메시지는 메모리가 부족할 때 디스크에 쓰입니다(RabbitMQ 재시작 후에는 손실됩니다).

RabbitMQ 큐 지속성

큐를 선언할 때 큐가 지속되어야 하는지 여부를 설정할 수 있습니다. Golang에서는 다음과 같이 큐를 선언합니다:

q, err := ch.QueueDeclare(
  "hello", // 큐 이름
  true,   // 큐를 지속해야 하는지 여부
  false,
  false,
  false,
  nil,
)

팁: 다른 프로그래밍 언어와 유사하게, 큐를 선언할 때 설정할 수 있습니다.

RabbitMQ 익스체인지 지속성

익스체인지를 선언할 때 속성을 사용하여 지속해야 하는지를 설정할 수 있습니다. Golang에서는 다음과 같이 선언합니다:

err = ch.ExchangeDeclare(
        "tizi365",   // 익스체인지 이름
        "fanout", // 익스체인지 타입
        true,     // 지속되어야 하는지
        false,    
        false,   
        false, 
        nil, 
    )

팁: 다른 프로그래밍 언어와 유사하게 익스체인지를 선언할 때 지속성을 설정할 수 있습니다.

RabbitMQ 메시지 지속성

메시지를 발행할 때 메시지 속성을 통해 메시지가 지속되어야 하는지를 설정할 수 있습니다.

팁: 큐의 지속성은 메시지가 자동으로 지속되는 것을 의미하지는 않습니다.

Golang에서는 다음과 같이 메시지를 발행합니다:

err = ch.Publish(
			"tizi365",     // 익스체인지
			"", // 라우팅 키
			false, 
			false,
			amqp.Publishing{
				DeliveryMode:2,  // 메시지 전달 모드, 1은 비지속적, 2는 지속적
				ContentType: "text/plain",
				Body:        []byte(body),
			})