- Spring AMQP 프레임워크에서 제공하는 클래스로, AMQP 메시지 큐를 쉽게 생성할 수 있게 도와줍니다. 이 클래스의 메서드를 사용하면 필요에 따라 다양한 속성을 가진 메시지 큐를 만들 수 있습니다. - 예를 들어, durable, exclusive, autoDelete 등의 메서드를 사용하여 메시지 큐의 지속성, 독점성, 자동 삭제 등의 속성을 설정할 수 있습니다.
- classicQueue에서는 제공되는 메서드를 이용한 방식이며, classicQueue2에서는 withArgument() 메서드의 키 속성을 이용한 방식을 사용한 예시입니다.
@ConfigurationpublicclassRabbitMqQueueExConfig {
/**
* Queue 구성 : 일반적인 클래식 큐로 구성
* TTL, 우선순위, 데드레터 익스체인지, 데드레터 라우트 키, 최대 길이 지정
*
* @return
*/@Beanpublic Queue classicQueue1() {
return QueueBuilder
// 1. 큐 유지 여부 설정
.durable("classicQueue1")
// 1. 메시지의 Expiration 지정(TTL : 1초)
.ttl(1000)
// 2. 큐 우선순위 지정
.maxPriority(2)
// 3. 데드 레터 익스체인지 지정
.deadLetterExchange("deadLetterExchange")
// 4. 데드 레터 라우터 지정
.deadLetterRoutingKey("deadLetter")
// 5. Queue의 길이 지정
.maxLength(100)
.build();
}
/**
* Queue 구성 : 일반적인 클래식 큐로 구성
* TTL, 우선순위, 데드레터 익스체인지, 데드레터 라우트 키, 최대 길이 지정
*
* @return
*/@Beanpublic Queue classicQueue2() {
return QueueBuilder
// 1. 큐 유지 여부 설정
.durable("classicQueue2")
// 1. 메시지의 Expiration 지정(TTL : 1초)
.withArgument(ConstQueueAttr.QUEUE_TTL, 1000) // or .ttl()// 2. 큐 우선순위 지정
.withArgument(ConstQueueAttr.QUEUE_PRIORITY, 2) // or .maxPriority()// 3. 데드 레터 익스체인지 지정
.withArgument(ConstQueueAttr.QUEUE_DEAD_LETTER_EXCHANGE, "deadLetterExchange") // or .deadLetterExchange()// 4. 데드 레터 라우터 지정
.withArgument(ConstQueueAttr.QUEUE_DEAD_LETTER_ROUTE_KEY, "deadLetter") // or .deadLetterRoutingKey()// 5. Queue의 길이 지정
.withArgument(ConstQueueAttr.QUEUE_MAX_LENGTH, 100) // or .maxLength()
.build();
}
}
- withArgument() 메서드와 함께 사용될 때 ‘키’에 값에 해당하는 속성들에 대해 알아봅니다.
키 속성
설명
x-message-ttl
메시지의 생존 시간을 설정합니다. 설정된 시간 후에 메시지는 삭제되거나 dead-letter-exchange로 라우팅됩니다.
x-max-priority
큐가 지원할 메시지의 우선 순위 수의 최대값을 설정합니다. 설정되지 않으면, 큐는 메시지 우선 순위를 지원하지 않습니다.
x-max-length
큐에서 허용하는 (준비된) 메시지의 수를 설정합니다. 이 수를 초과하면 큐는 메시지를 삭제하기 시작합니다.
x-dead-letter-exchange
만료 또는 거부된 메시지를 라우팅할 dead-letter exchange를 설정합니다.
x-dead-letter-routing-key
만료 또는 거부된 메시지를 dead-letter exchange로 라우팅할 때 사용할 라우팅 키를 설정합니다.
x-single-active-consumer
'x-single-active-consumer' 큐 인수를 설정합니다. 이는 한 번에 하나의 소비자만 큐에서 메시지를 소비하도록 합니다.
x-expires
큐가 삭제되기 전에 사용되지 않을 수 있는 시간을 설정합니다.
x-overflow
최대 메시지 수 또는 최대 메시지 크기가 초과되어 메시지가 삭제될 때의 오버플로 모드를 설정합니다.
x-queue-type
'classic', 'quorum', 'stream' 중 하나의 큐 유형을 선언하기 위해 큐 인수를 설정합니다.
x-max-length-bytes
큐에서 허용하는 총 메시지 바디 크기를 설정합니다. 이 크기를 초과하면 큐는 메시지를 삭제하기 시작합니다.
x-lazy
브로커에서 RAM 사용량을 줄이기 위해 가능한 한 많은 메시지를 디스크에 유지하는 lazy 모드로 큐를 설정합니다.
x-queue-master-locator
노드 클러스터에 큐 마스터가 위치할 노드를 결정하는 마스터 로케이터 모드를 설정합니다.
/**
* 큐의 속성 키 값을 관리하는 상수 클래스입니다.
*
* @author : lee
* @fileName : ConstQueueAttr
* @since : 24. 6. 10.
*/publicclassConstQueueAttr {
publicstaticfinalStringQUEUE_LAZY="x-lazy"; // 브로커에서 RAM 사용량을 줄이기 위해 가능한 한 많은 메시지를 디스크에 유지하는 lazy 모드로 큐를 설정합니다.publicstaticfinalStringQUEUE_TYPE="x-queue-type"; // 'classic', 'quorum', 'stream' 중 하나의 큐 유형을 선언하기 위해 큐 인수를 설정합니다.publicstaticfinalStringQUEUE_TTL="x-message-ttl"; // 메시지의 생존 시간을 설정합니다.publicstaticfinalStringQUEUE_EXPIRES="x-expires"; // 큐가 삭제되기 전에 사용되지 않을 수 있는 시간을 설정합니다.publicstaticfinalStringQUEUE_OVERFLOW="x-overflow"; // 최대 메시지 수 또는 최대 메시지 크기가 초과되어 메시지가 삭제될 때의 오버플로 모드를 설정합니다.publicstaticfinalStringQUEUE_PRIORITY="x-max-priority"; // 큐가 지원할 메시지의 우선 순위 수의 최대값을 설정합니다.publicstaticfinalStringQUEUE_MAX_LENGTH="x-max-length"; // 큐에서 허용하는 (준비된) 메시지의 수를 설정합니다.publicstaticfinalStringQUEUE_MAX_LENGTH_BYTE="x-max-length-bytes"; // 큐에서 허용하는 총 메시지 바디 크기를 설정합니다. 이 크기를 초과하면 큐는 메시지를 삭제하기 시작합니다.publicstaticfinalStringQUEUE_MASTER_LOCATOR="x-queue-master-locator"; // 노드 클러스터에 큐 마스터가 위치할 노드를 결정하는 마스터 로케이터 모드를 설정합니다.publicstaticfinalStringQUEUE_DEAD_LETTER_EXCHANGE="x-dead-letter-exchange"; // 만료 또는 거부된 메시지를 라우팅할 dead-letter exchange를 설정합니다.publicstaticfinalStringQUEUE_DEAD_LETTER_ROUTE_KEY="x-dead-letter-routing-key"; // 만료 또는 거부된 메시지를 dead-letter exchange로 라우팅할 때 사용할 라우팅 키를 설정합니다.publicstaticfinalStringQUEUE_SINGLE_ACTIVE_CONSUMER="x-single-active-consumer"; // 'x-single-active-consumer' 큐 인수를 설정합니다. 이는 한 번에 하나의 소비자만 큐에서 메시지를 소비하도록 합니다.
}