1. Key를 사용해 구분하기
메시지 전송
rabbitTemplate.convertAndSend("orderExchange", "order.create", "create");
rabbitTemplate.convertAndSend("orderExchange", "order.cancel", "cancel");
Listener 설정
@Component
public class OrderListener {
@RabbitListener(queues = "orderQueue")
public void handleOrderMessages(String message, @Header("amqp_receivedRoutingKey") String routingKey) {
if ("order.create".equals(routingKey)) {
System.out.println("Received order.create message: " + message);
// 주문 생성 처리 로직
} else if ("order.cancel".equals(routingKey)) {
System.out.println("Received order.cancel message: " + message);
// 주문 취소 처리 로직
} else {
System.out.println("Received unknown message with routing key: " + routingKey);
}
}
}
2. @RabbitHandler 사용하여 구분하기
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "orderQueue")
public class OrderListener {
@RabbitHandler
public void handleOrderCreate(OrderCreateMessage message) {
System.out.println("Processing order create message: " + message);
// 주문 생성 처리 로직
}
@RabbitHandler
public void handleOrderCancel(OrderCancelMessage message) {
System.out.println("Processing order cancel message: " + message);
// 주문 취소 처리 로직
}
@RabbitHandler
public void handleDefault(Object message) {
System.out.println("Processing unknown type message: " + message);
// 기본 처리 로직 (알 수 없는 타입의 메시지)
}
}
- 단점 : DTO를 주고 받을텐데 각 DTO를 계속 생성해서 전달해야 한다.
3. 작업마다 큐를 생성하여 구분하기
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class MessageListener {
@RabbitListener(queues = "task_queue_create")
public void receiveCreateMessage(String message) {
System.out.println("Received CREATE message: " + message);
// 처리 로직
}
@RabbitListener(queues = "task_queue_read")
public void receiveReadMessage(String message) {
System.out.println("Received READ message: " + message);
// 처리 로직
}
@RabbitListener(queues = "task_queue_update")
public void receiveUpdateMessage(String message) {
System.out.println("Received UPDATE message: " + message);
// 처리 로직
}
@RabbitListener(queues = "task_queue_delete")
public void receiveDeleteMessage(String message) {
System.out.println("Received DELETE message: " + message);
// 처리 로직
}
}
'대규모 시스템' 카테고리의 다른 글
RabbitMQ 라우팅 키로 구분하여 하나의 큐로 메세지 보내기 (0) | 2024.09.05 |
---|---|
SAGA Pattern (0) | 2024.08.14 |
Kafka 기본 설정 (0) | 2024.08.14 |
Kafka란? (0) | 2024.08.14 |
RabbitMQ 기본 설정 (0) | 2024.08.14 |