[java] ActiveMQ와 RabbitMQ에서의 메시지 속성 활용 방법

메시징 시스템은 대규모 애플리케이션에서 데이터 교환을 효율적으로 처리하기 위한 핵심 요소입니다. 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는 메시지 속성을 활용하여 메시징 시스템을 유연하고 강력하게 만들어줍니다. 이를 통해 메시지를 구별하고 분석하기 쉽게 됩니다. 메시지 속성을 적절하게 활용하여 애플리케이션의 요구 사항에 맞는 메시지 기반 아키텍처를 구축할 수 있습니다.

참고 자료