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),
})