반응형
해당 글에서는 Spring 환경에서 RabbitMQ를 사용하기 위한 org.springframework.amqp.core 패키지 내에 포함되어 있는 BindingBuilder 클래스의 메서드에 대해 확인합니다.
💡 [참고] 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 : 3.2.0 | https://adjh54.tistory.com/505 |
ExchangeBuilder API Document: 3.2.0 | https://adjh54.tistory.com/506 |
BindingBuilder API Document: 3.2.0 | https://adjh54.tistory.com/507 |
MessageProperties, Builder, BuilderSupport API Document | https://adjh54.tistory.com/508 |
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) BindingBuilder
💡 BindingBuilder
- 메시지 브로커와의 연결을 설정하는 데 사용되는 메서드를 제공합니다. 이 클래스의 메서드를 사용하여 Exchange와 큐를 바인딩하고, 라우팅 키를 설정하고, 바인딩의 다양한 속성을 정의할 수 있습니다.
- 이는 애플리케이션의 메시지 전송 및 수신을 관리하는 데 필수적인 도구입니다.
클래스 | 리턴 타입 | 설명 |
BindingBuilder.DestinationConfigurer | static final class | 일반적인 목적지 구성자. |
BindingBuilder.DirectExchangeRoutingKeyConfigurer | static final class | 직접 교환 라우팅 키 구성자. |
BindingBuilder.GenericArgumentsConfigurer | static class | 일반적인 인수 구성자. |
BindingBuilder.GenericExchangeRoutingKeyConfigurer | static final class | 일반적인 교환 라우팅 키 구성자. |
BindingBuilder.HeadersExchangeMapConfigurer | static final class | 헤더 교환 구성자. |
BindingBuilder.TopicExchangeRoutingKeyConfigurer | static final class | 토픽 교환 라우팅 키 구성자. |
2) BindingBuilder Inner Class Method
1. BindingBuilder.DestinationConfigurer
💡 BindingBuilder.DestinationConfigurer
- BindingBuilder 클래스의 내부 클래스입니다. 이 클래스는 대상(Exchange 또는 Queue)에 바인딩을 설정하는 메서드를 제공합니다.
- 이를 통해 메시지 브로커와의 연결을 정확하게 설정하고 관리할 수 있습니다.
메서드 | 리턴 타입 | 설명 |
to(DirectExchange exchange) | BindingBuilder.DirectExchangeRoutingKeyConfigurer | DirectExchange 유형의 교환기를 대상으로 설정합니다. |
to(Exchange exchange) | BindingBuilder.GenericExchangeRoutingKeyConfigurer | 일반 Exchange 유형의 교환기를 대상으로 설정합니다. |
to(FanoutExchange exchange) | Binding | FanoutExchange 유형의 교환기를 대상으로 설정합니다. |
to(HeadersExchange exchange) | BindingBuilder.HeadersExchangeMapConfigurer | HeadersExchange 유형의 교환기를 대상으로 설정합니다. |
to(TopicExchange exchange) | BindingBuilder.TopicExchangeRoutingKeyConfigurer | TopicExchange 유형의 교환기를 대상으로 설정합니다. |
// BindingBuilder와 DestinationConfigurer를 사용한 예시
DirectExchange directExchange = new DirectExchange("my.direct.exchange");
Queue queue = new Queue("my.queue");
// directExchange에 queue를 바인딩하는 코드
Binding binding = BindingBuilder
.bind(queue) // 대상 Queue 설정
.to(directExchange) // DirectExchange 유형의 교환기를 대상으로 설정
.with("my.routing.key"); // 라우팅 키 설정
2. BindingBuilder.DirectExchangeRoutingKeyConfigurer
💡 BindingBuilder.DirectExchangeRoutingKeyConfigurer
- BindingBuilder 클래스의 다른 내부 클래스입니다.
- 이 클래스는 Direct Exchange 유형의 교환기를 사용할 때 라우팅 키를 설정하는 메서드를 제공합니다.
- 이를 통해 메시지가 올바른 대상으로 정확하게 이동할 수 있도록 합니다.
메서드 | 리턴 타입 | 설명 |
with(Enum<?> routingKeyEnum) | Binding | Enum 유형의 라우팅 키를 설정합니다. |
with(String routingKey) | Binding | String 유형의 라우팅 키를 설정합니다. |
withQueueName() | Binding | 큐 이름에 따라 라우팅을 설정합니다. |
// BindingBuilder와 DirectExchangeRoutingKeyConfigurer를 사용한 예시
DirectExchange directExchange = new DirectExchange("my.direct.exchange");
Queue queue = new Queue("my.queue");
// directExchange에 queue를 바인딩하고, 라우팅 키를 설정하는 코드
Binding binding = BindingBuilder
.bind(queue) // 대상 Queue 설정
.to(directExchange) // DirectExchange 유형의 교환기를 대상으로 설정
.with("my.routing.key"); // 라우팅 키 설정
3. BindingBuilder.GenericArgumentsConfigurer
💡 BindingBuilder.GenericArgumentsConfigurer
-BindingBuilder 클래스의 다른 내부 클래스입니다. 이 클래스는 BindingBuilder에서 생성된 바인딩에 대해 제네릭 인자를 설정하는 메서드를 제공합니다.
- 이를 통해 바인딩 설정에 더욱 상세한 제어를 할 수 있게 됩니다.
메서드 | 리턴 타입 | 설명 |
and(Map<String, Object> map) | Binding | 제네릭 인자로 String, Object 타입의 Map을 설정합니다. |
noargs() | Binding | 인자 없이 바인딩을 설정합니다. |
// BindingBuilder와 GenericArgumentsConfigurer를 사용한 예시
DirectExchange directExchange = new DirectExchange("my.direct.exchange");
Queue queue = new Queue("my.queue");
// 바인딩에 제네릭 인자를 추가하는 코드
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-message-ttl", 60000); // 메시지 TTL을 60초로 설정
Binding binding = BindingBuilder
.bind(queue) // 대상 Queue 설정
.to(directExchange) // DirectExchange 유형의 교환기를 대상으로 설정
.with("my.routing.key") // 라우팅 키 설정
.and(arguments); // 제네릭 인자 설정
4. BindingBuilder.TopicExchangeRoutingKeyConfigurer
💡 BindingBuilder.TopicExchangeRoutingKeyConfigurer
- BindingBuilder 클래스의 한 내부 클래스입니다. 이 클래스는 Topic Exchange 유형의 교환기를 사용할 때 라우팅 키를 설정하는 메서드를 제공합니다.
- 이를 통해 특정 토픽에 대한 메시지를 올바른 대상으로 정확하게 라우팅 할 수 있습니다.
// BindingBuilder와 TopicExchangeRoutingKeyConfigurer를 사용한 예시
TopicExchange topicExchange = new TopicExchange("my.topic.exchange");
Queue queue = new Queue("my.queue");
// topicExchange에 queue를 바인딩하고, 라우팅 키를 설정하는 코드
Binding binding = BindingBuilder
.bind(queue) // 대상 Queue 설정
.to(topicExchange) // TopicExchange 유형의 교환기를 대상으로 설정
.with("my.*.routing.key"); // 라우팅 키 설정
5. BindingBuilder.HeadersExchangeMapConfigurer
💡 BindingBuilder.HeadersExchangeMapConfigurer
- BindingBuilder 클래스의 다른 내부 클래스입니다. 이 클래스는 Headers Exchange 유형의 교환기를 사용할 때 맵을 설정하는 메서드를 제공합니다.
- 이를 통해 메시지가 올바른 대상으로 정확하게 이동할 수 있도록 합니다.
메서드 | 리턴 타입 | 설명 |
where(String key) | BindingBuilder.HeadersExchangeMapConfigurer.HeadersExchangeSingleValueBindingCreator | String 형태의 키를 설정합니다. |
whereAll(String... headerKeys) | BindingBuilder.HeadersExchangeMapConfigurer.HeadersExchangeKeysBindingCreator | 여러개의 String 형태의 헤더 키를 설정합니다. |
whereAll(Map<String, Object> headerValues) | BindingBuilder.HeadersExchangeMapConfigurer.HeadersExchangeMapBindingCreator | 헤더 값들이 들어있는 Map을 설정합니다. |
whereAny(String... headerKeys) | BindingBuilder.HeadersExchangeMapConfigurer.HeadersExchangeKeysBindingCreator | 여러개의 String 형태의 헤더 키 중 어느 것이라도 설정합니다. |
whereAny(Map<String, Object> headerValues) | BindingBuilder.HeadersExchangeMapConfigurer.HeadersExchangeMapBindingCreator | 헤더 값들이 들어있는 Map 중 어느 것이라도 설정합니다. |
// BindingBuilder와 HeadersExchangeMapConfigurer를 사용한 예시
HeadersExchange headersExchange = new HeadersExchange("my.headers.exchange");
Queue queue = new Queue("my.queue");
// headersExchange에 queue를 바인딩하고, 헤더 맵을 설정하는 코드
Map<String, Object> headerMap = new HashMap<>();
headerMap.put("format", "pdf");
headerMap.put("department", "sales");
Binding binding = BindingBuilder
.bind(queue) // 대상 Queue 설정
.to(headersExchange) // HeadersExchange 유형의 교환기를 대상으로 설정
.whereAll(headerMap) // 헤더 맵 설정
.match();
6. BindingBuilder.TopicExchangeRoutingKeyConfigurer
💡 BindingBuilder.TopicExchangeRoutingKeyConfigurer
- BindingBuilder 클래스의 내부 클래스입니다. 이 클래스는 Topic Exchange 유형의 교환기를 사용할 때 라우팅 키를 설정하는 메서드를 제공합니다.
- 이 클래스의 메서드를 사용하면 메시지가 특정 토픽에 따라 올바른 대상으로 정확하게 라우팅 될 수 있습니다.
메서드 | 리턴 타입 | 설명 |
with(Enum<?> routingKeyEnum) | Binding | Enum 유형의 라우팅 키를 설정합니다. |
with(String routingKey) | Binding | String 유형의 라우팅 키를 설정합니다. |
// BindingBuilder와 TopicExchangeRoutingKeyConfigurer를 사용한 예시
TopicExchange topicExchange = new TopicExchange("my.topic.exchange");
Queue queue = new Queue("my.queue");
// topicExchange에 queue를 바인딩하고, 라우팅 키를 설정하는 코드
Binding binding = BindingBuilder
.bind(queue) // 대상 Queue 설정
.to(topicExchange) // TopicExchange 유형의 교환기를 대상으로 설정
.with("my.*.routing.key"); // 라우팅 키 설정
오늘도 감사합니다. 😀
반응형