[java] ActiveMQ와 RabbitMQ의 다양한 인터페이스 연동 방법

ActiveMQ와 RabbitMQ는 모두 메시지 큐 서비스를 제공하는 인기있는 오픈 소스 프로젝트입니다. 이들은 다양한 인터페이스를 통해 다른 시스템과의 연동을 지원합니다. 이 글에서는 ActiveMQ와 RabbitMQ의 다양한 인터페이스 연동 방법에 대해 알아보겠습니다.

1. JMS (Java Message Service)

ActiveMQ는 JMS (Java Message Service) 표준을 지원하므로 Java 언어를 사용하는 애플리케이션과의 연동에 적합합니다. JMS를 사용하여 ActiveMQ와 통신하려면 다음 순서로 진행합니다.

import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;

public class ActiveMQConsumer {
    public static void main(String[] args){
        try {
            // 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) 설정
            Destination destination = session.createQueue("myQueue");

            // Consumer 생성
            MessageConsumer consumer = session.createConsumer(destination);

            // 메시지 수신 및 처리
            while (true) {
                Message message = consumer.receive();
                if (message instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage)message;
                    System.out.println("Received message: " + textMessage.getText());
                }
            }

            // 연결 종료
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위의 코드는 ActiveMQ에 연결하여 메시지를 수신하는 간단한 Java 애플리케이션입니다.

RabbitMQ 역시 JMS를 지원하지만, JMS 클라이언트 보다는 RabbitMQ의 고유한 프로토콜인 AMQP를 사용하는 것이 일반적입니다.

2. AMQP (Advanced Message Queuing Protocol)

RabbitMQ는 AMQP (Advanced Message Queuing Protocol)를 기본 프로토콜로 사용합니다. AMQP는 네트워크상의 다른 프로그램과 통신하기 위한 역할을 하는 메시지 지향 미들웨어를 구현하는 데 사용되는 역할 규격입니다.

RabbitMQ의 AMQP 클라이언트를 사용하여 RabbitMQ와 연동하려면 다음과 같이 진행합니다.

import com.rabbitmq.client.*;

public class RabbitMQConsumer {
    private final static String QUEUE_NAME = "myQueue";

    public static void main(String[] args) throws Exception {
        // Connection 생성
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        
        // Channel 생성 및 Queue 선언
        Channel channel = connection.createChannel();
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        
        // Consumer 생성
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
            throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("Received message: " + message);
            }
        };
        
        // 메시지 소비 시작
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

위의 코드는 RabbitMQ에 연결하여 메시지를 수신하는 Java 애플리케이션입니다. AMQP 클라이언트를 사용하여 RabbitMQ와 통신하는 방법을 보여줍니다.

3. REST API

ActiveMQ는 REST API를 통해 다른 시스템과의 통신을 지원합니다. REST API를 사용하여 ActiveMQ와 통신하려면 HTTP 요청을 생성하여 메시지를 전송해야 합니다. 예를 들어, 다음과 같은 cURL 명령을 사용하여 ActiveMQ로 메시지를 전송할 수 있습니다.

$ curl -X POST -H "Content-Type: application/json" -d '{"message": "Hello, ActiveMQ!"}' http://localhost:8161/api/message/myQueue?type=queue

RabbitMQ는 REST API를 직접 제공하지는 않지만, RabbitMQ의 HTTP API를 사용하여 관리 작업을 수행할 수 있습니다. 예를 들어, 다음과 같은 cURL 명령을 사용하여 RabbitMQ에서 Queue 정보를 가져올 수 있습니다.

$ curl -u guest:guest -H "Content-Type: application/json" -X GET http://localhost:15672/api/queues/%2F/myQueue

결론

ActiveMQ와 RabbitMQ는 다양한 인터페이스를 통해 다른 시스템과의 연동을 지원합니다. JMS, AMQP, REST API 등을 사용하여 손쉽게 메시지 큐를 활용할 수 있습니다. 각각의 인터페이스에 따라 선택된 프로토콜을 활용하여 연동 애플리케이션을 개발해보세요.