티스토리 뷰
반응형
RabbitMQ는 AMQP를 따르는 오픈소스 메세지 브로커인데, 메세지를 많은 사용자에게 전달하거나,
요청에 대한 처리 시간이 길 때, 해당 요청을 다른 API에게 위임하고 빠른 응답을 할 때 많이 사용합니다.
또한, MQ를 사용하여 애플리케이션 간 결합도를 낮출 수 있는 장점도 있습니다.
기본적 개념에 대한Reference: blog.dudaji.com/general/2020/05/25/rabbitmq.html
스프링에서 제공하는 실제 사용 로직: spring.io/guides/gs/messaging-rabbitmq/
영어 문서는 다소 복잡해서 쉽게 소스를 올려서 사용해보고자 합니다.
먼저 RabbitMQ를 사용하기 전 Configuration을 적용하는 클래스입니다.
@Configuration
public class RabbitConfig {
public static final String queueName = "queue-name";
public static final String topicExchangeName = "topic-exchange";
@Bean
Queue queue() {
return new Queue(queueName, false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange(topicExchangeName);
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("project.#");
}
@Bean
RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory,
MessageConverter messageConverter) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(messageConverter);
return rabbitTemplate;
}
@Bean
MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
}
@Service
@Slf4j
public class MessageService {
@Resource(name = "rabbitTemplate")
private RabbitTemplate rabbitTemplate;
@Autowired ObjectMapper objectMapper;
final String subject = "SUBJECT_NAME";
public void sendMessage(MessageEnum action, Map<String, Object> data) throws Exception {
Map<String, Object> body = Map.of("subject", subject, "action", action.name(), "data", data);
String stringify = objectMapper.writeValueAsString(body);
log.info("Send Message Stringify : " + stringify);
rabbitTemplate.convertAndSend(RabbitConfig.topicExchangeName, "topic.exchange", stringify);
}
}
위의 소스 내용은 메시지가 어떠한 액션인지와 그에 필요한 데이터를 메시징 서비스에 제공하는 함수를 구현한 내용입니다.
실제로 사용하려면 이렇게 적용해도 되겠죠?
public void sendMessageForUpdateMember(String memberId) throws Exception {
messageService.sendMessage(MessageEnum.CHANGE_MEMBER_INFO, Map.of("memberId", memberId));
}
반응형
'Server' 카테고리의 다른 글
[Java] Zip 파일로 다운로드 만들어보기 (0) | 2021.01.18 |
---|---|
[Java] UUID 활용하기 (0) | 2021.01.14 |
Command Line에서 BootRun 실행하기 (0) | 2021.01.04 |
[Spring] ControllerAdvice AOP 어노테이션과 사용법 (0) | 2020.12.14 |
Linux 포트 확인 및 백그라운드 프로세스 실행 (0) | 2020.12.07 |
[Java] 앱 버전 분기하기 (0) | 2020.08.07 |
댓글
공지사항