메시징 시스템은 대규모 애플리케이션에서 데이터 교환을 효율적으로 처리하기 위한 핵심 요소입니다. ActiveMQ와 RabbitMQ는 인기있는 오픈 소스 메시징 브로커입니다. 이 둘은 다양한 기능을 제공하며, 메시지 전달의 유연성을 높일 수 있는 메시지 속성 기능도 포함하고 있습니다.
메시지 속성이란?
메시지 속성은 메시지에 관련된 추가 정보를 나타내는데 사용됩니다. 예를 들어, 주문을 처리하는 애플리케이션에서 주문 ID, 주문 시간, 주문자 이름 등의 정보를 메시지에 포함할 수 있습니다. 이러한 속성은 메시지 소비자가 메시지를 구별하고 분석하는 데 도움을 줄 수 있습니다.
ActiveMQ에서의 메시지 속성 활용 방법
ActiveMQ는 JMS(Java Message Service)를 기반으로한 메시징 브로커입니다. 메시지 속성은 JMS API를 사용하여 설정 및 읽기가 가능합니다.
import javax.jms.*;
// Connection 생성
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
// Session 생성
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Destination(Queue 또는 Topic) 생성
Queue queue = session.createQueue("myQueue");
// MessageProducer 생성
MessageProducer producer = session.createProducer(queue);
// Message 생성
TextMessage message = session.createTextMessage("Hello, World!");
// 메시지 속성 추가
message.setStringProperty("orderId", "12345");
message.setLongProperty("timestamp", System.currentTimeMillis());
// Message 발송
producer.send(message);
// 리소스 해제
producer.close();
session.close();
connection.close();
위의 예제에서는 setStringProperty()
와 setLongProperty()
를 사용하여 메시지에 속성을 추가합니다. 이렇게 설정된 속성은 메시지를 소비하는 쪽에서 getStringProperty()
또는 getLongProperty()
를 사용하여 읽을 수 있습니다.
RabbitMQ에서의 메시지 속성 활용 방법
RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 기반으로한 메시징 브로커입니다. RabbitMQ에서는 메시지 속성을 BasicProperties
클래스를 사용하여 설정하고 읽을 수 있습니다.
import com.rabbitmq.client.*;
// Connection 생성
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("localhost");
Connection connection = connectionFactory.newConnection();
// Channel 생성
Channel channel = connection.createChannel();
// Queue 선언
String queueName = "myQueue";
channel.queueDeclare(queueName, false, false, false, null);
// Message 속성 설정
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
.correlationId("12345")
.timestamp(new Date())
.build();
// Message 발송
String message = "Hello, World!";
channel.basicPublish("", queueName, properties, message.getBytes("UTF-8"));
// 리소스 해제
channel.close();
connection.close();
RabbitMQ에서는 BasicProperties
클래스의 빌더를 사용하여 메시지에 속성을 설정합니다. 이렇게 설정된 속성은 메시지를 소비하는 쪽에서 getCorrelationId()
와 getTimestamp()
를 사용하여 읽을 수 있습니다.
결론
ActiveMQ와 RabbitMQ는 메시지 속성을 활용하여 메시징 시스템을 유연하고 강력하게 만들어줍니다. 이를 통해 메시지를 구별하고 분석하기 쉽게 됩니다. 메시지 속성을 적절하게 활용하여 애플리케이션의 요구 사항에 맞는 메시지 기반 아키텍처를 구축할 수 있습니다.
참고 자료
- ActiveMQ Documentation
- RabbitMQ Documentation
- Java Message Service (JMS) API Documentation
- AMQP 0-9-1 Model Explained