반응형
해당 글에서는 Spring 환경에서 RabbitMQ를 사용하기 위한 org.springframework.amqp.core 패키지 내에 포함되어 있는 QueueBuilder 내의 메서드에 대해 확인합니다.
💡 [참고] Spring Boot AMQP RabbitMQ에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
분류 | 링크 |
Spring Boot AMQP RabbitMQ -1 : 구조 및 종류 이해하기 | https://adjh54.tistory.com/284 |
Spring Boot AMQP RabbitMQ -2 : 로컬 환경 구성하기 | https://adjh54.tistory.com/285 |
Spring Boot AMQP RabbitMQ -3 : Java 환경 구축 및 간단 예시 | https://adjh54.tistory.com/292 |
Spring Boot AMQP RabbitMQ -4 : Exchange 종류 별 이해 및 사용예시 | https://adjh54.tistory.com/497 |
Spring Boot AMQP RabbitMQ -5 : TTL 및 데드 레터링 사용예시 | https://adjh54.tistory.com/501 |
Docker를 이용하여 RabbitMQ 구축하기 | https://adjh54.tistory.com/496 |
QueueBuilder API Document | https://adjh54.tistory.com/505 |
Spring Boot AMQP RabbitMQ Github : Event Producer | https://github.com/adjh54ir/blog-codes/tree/main/spring-boot-rabbitmq |
Spring Boot AMQP RabbitMQ Github : Event Consumer | https://github.com/adjh54ir/blog-codes/tree/main/spring-boot-rabbitmq-consumer |
1) QueueBuilder
💡 QueueBuilder
- Spring AMQP 프레임워크에서 제공하는 클래스로, AMQP 메시지 큐를 쉽게 생성할 수 있게 도와줍니다. 이 클래스의 메서드를 사용하면 필요에 따라 다양한 속성을 가진 메시지 큐를 만들 수 있습니다.
- 예를 들어, durable, exclusive, autoDelete 등의 메서드를 사용하여 메시지 큐의 지속성, 독점성, 자동 삭제 등의 속성을 설정할 수 있습니다.
2) QueueBuilder Class Method
💡 QueueBuilder Class Method
- 해당 분류 내용은 API를 확인하고 비슷한 내용에 대해 분류하였으니 참고하시면 될 것 같습니다.
메서드 | 리턴 타입 | 분류 | 설명 |
build() | Queue | Queue 속성 설정 | 최종 큐를 생성합니다. |
withArgument(String key, Object value) | QueueBuilder | Queue 속성 설정 | 최종 큐는 큐를 선언하는 데 사용되는 인수를 포함합니다. |
withArguments(Map<String,Object> arguments) | QueueBuilder | Queue 속성 설정 | 최종 큐는 큐를 선언하는 데 사용되는 인수를 포함합니다. |
autoDelete() | QueueBuilder | Queue 속성 설정 | 최종 큐는 자동으로 삭제됩니다. |
deadLetterExchange(String dlx) | QueueBuilder | Queue 속성 설정 | 만료 또는 거부된 메시지를 라우팅할 dead-letter exchange를 설정합니다. |
deadLetterRoutingKey(String dlrk) | QueueBuilder | Queue 속성 설정 | 만료 또는 거부된 메시지를 dead-letter exchange로 라우팅할 때 사용할 라우팅 키를 설정합니다. |
ttl(int ttl) | QueueBuilder | Queue 속성 설정 | 설정된 경우 메시지가 삭제되거나 dead-letter-exchange로 라우팅될 수 있는 메시지의 생존 시간을 설정합니다. |
maxLength(int count) | QueueBuilder | Queue 속성 설정 | maxLength(long)을 위해 사용 중단. |
maxLength(long count) | QueueBuilder | Queue 속성 설정 | 큐가 메시지를 삭제하기 시작하기 전에 큐에서 허용하는 (준비된) 메시지의 수를 설정합니다. |
maxLengthBytes(int bytes) | QueueBuilder | Queue 속성 설정 | 큐가 메시지를 삭제하기 시작하기 전에 큐에서 허용하는 총 메시지 바디 크기를 설정합니다. |
maxPriority(int maxPriority) | QueueBuilder | Queue 속성 설정 | 큐가 지원할 우선 순위 수의 최대값을 설정합니다; 설정하지 않으면, 큐는 메시지 우선 순위를 지원하지 않습니다. |
expires(int expires) | QueueBuilder | Queue 속성 설정 | 큐가 삭제되기 전에 사용되지 않을 수 있는 시간을 설정합니다. |
durable() | static QueueBuilder | Queue 속성 설정 | 생성된 고유한 이름을 가진 내구성 있는 큐를 위한 빌더를 생성합니다 |
durable(String name) | static QueueBuilder | Queue 속성 설정 | 내구성 있는 큐를 위한 빌더를 생성합니다. |
nonDurable() | static QueueBuilder | Queue 속성 설정 | 비내구성 (일시적) 큐를 위한 빌더를 생성합니다. |
nonDurable(String name) | static QueueBuilder | Queue 속성 설정 | 비내구성 (일시적) 큐를 위한 빌더를 생성합니다. |
exclusive() | QueueBuilder | Queue 속성 설정 | 최종 큐는 독점적이 됩니다. |
lazy() | QueueBuilder | Queue 속성 설정 | 브로커에서 RAM 사용량을 줄이기 위해 가능한 한 많은 메시지를 디스크에 유지하는 lazy 모드로 큐를 설정합니다. |
leaderLocator(QueueBuilder.LeaderLocator locator) | QueueBuilder | Queue 속성 설정 | 노드 클러스터에 큐 마스터가 위치할 노드를 결정하는 마스터 로케이터 모드를 설정합니다. |
singleActiveConsumer() | QueueBuilder | Queue 속성 설정 | 'x-single-active-consumer' 큐 인수를 설정합니다. |
overflow(QueueBuilder.Overflow overflow) | QueueBuilder | Queue 속성 설정 | 최대 메시지 수 또는 최대 메시지 크기가 초과되어 메시지가 삭제될 때의 오버플로 모드를 설정합니다. |
quorum() | QueueBuilder | Quorum Queue 속성 설정 | 'classic' 대신 'quorum' 유형의 큐를 선언하기 위해 큐 인수를 설정합니다. |
deliveryLimit(int limit) | QueueBuilder | Quorum Queue 속성 설정 | 배송 제한을 설정합니다; quorum 대기열에만 적용됩니다. |
stream() | QueueBuilder | Stream Queue 속성 설정 | 'classic' 대신 'stream' 유형의 큐를 선언하기 위해 큐 인수를 설정합니다. |
3) Queue 사용예시
💡 Queue 사용예시
- classicQueue에서는 제공되는 메서드를 이용한 방식이며, classicQueue2에서는 withArgument() 메서드의 키 속성을 이용한 방식을 사용한 예시입니다.
@Configuration
public class RabbitMqQueueExConfig {
/**
* Queue 구성 : 일반적인 클래식 큐로 구성
* TTL, 우선순위, 데드레터 익스체인지, 데드레터 라우트 키, 최대 길이 지정
*
* @return
*/
@Bean
public 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
*/
@Bean
public 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();
}
}
4) 참고 속성 값
💡 참고 속성 값
- 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.
*/
public class ConstQueueAttr {
public static final String QUEUE_LAZY = "x-lazy"; // 브로커에서 RAM 사용량을 줄이기 위해 가능한 한 많은 메시지를 디스크에 유지하는 lazy 모드로 큐를 설정합니다.
public static final String QUEUE_TYPE = "x-queue-type"; // 'classic', 'quorum', 'stream' 중 하나의 큐 유형을 선언하기 위해 큐 인수를 설정합니다.
public static final String QUEUE_TTL = "x-message-ttl"; // 메시지의 생존 시간을 설정합니다.
public static final String QUEUE_EXPIRES = "x-expires"; // 큐가 삭제되기 전에 사용되지 않을 수 있는 시간을 설정합니다.
public static final String QUEUE_OVERFLOW = "x-overflow"; // 최대 메시지 수 또는 최대 메시지 크기가 초과되어 메시지가 삭제될 때의 오버플로 모드를 설정합니다.
public static final String QUEUE_PRIORITY = "x-max-priority"; // 큐가 지원할 메시지의 우선 순위 수의 최대값을 설정합니다.
public static final String QUEUE_MAX_LENGTH = "x-max-length"; // 큐에서 허용하는 (준비된) 메시지의 수를 설정합니다.
public static final String QUEUE_MAX_LENGTH_BYTE = "x-max-length-bytes"; // 큐에서 허용하는 총 메시지 바디 크기를 설정합니다. 이 크기를 초과하면 큐는 메시지를 삭제하기 시작합니다.
public static final String QUEUE_MASTER_LOCATOR = "x-queue-master-locator"; // 노드 클러스터에 큐 마스터가 위치할 노드를 결정하는 마스터 로케이터 모드를 설정합니다.
public static final String QUEUE_DEAD_LETTER_EXCHANGE = "x-dead-letter-exchange"; // 만료 또는 거부된 메시지를 라우팅할 dead-letter exchange를 설정합니다.
public static final String QUEUE_DEAD_LETTER_ROUTE_KEY = "x-dead-letter-routing-key"; // 만료 또는 거부된 메시지를 dead-letter exchange로 라우팅할 때 사용할 라우팅 키를 설정합니다.
public static final String QUEUE_SINGLE_ACTIVE_CONSUMER = "x-single-active-consumer"; // 'x-single-active-consumer' 큐 인수를 설정합니다. 이는 한 번에 하나의 소비자만 큐에서 메시지를 소비하도록 합니다.
}
오늘도 감사합니다. 😀
반응형