[java] Apache ActiveMQ를 이용한 비동기 처리 구현 방법

Apache ActiveMQ는 오픈 소스 메시징 솔루션으로, 다양한 플랫폼 간에 메시지를 교환하고 비동기 처리를 구현하는 데 사용됩니다. 이번 글에서는 Java 언어를 사용하여 Apache ActiveMQ를 이용한 비동기 처리를 구현하는 방법을 알아보겠습니다.

1. Apache ActiveMQ 설치 및 설정

  1. Apache ActiveMQ를 공식 웹사이트에서 다운로드하고 설치합니다.
  2. ActiveMQ 설치 디렉토리로 이동하고 bin 폴더 안에 있는 activemq start 명령을 실행하여 ActiveMQ 브로커를 시작합니다.
  3. 브라우저에서 http://localhost:8161/admin에 접속하여 ActiveMQ 관리 콘솔에 로그인합니다. 기본 ID와 비밀번호는 admin/admin입니다.
  4. 관리 콘솔에서 “Destinations” 메뉴로 이동하고, “Add Queue” 버튼을 클릭하여 메시지 큐를 생성합니다. 큐의 이름은 자유롭게 지정할 수 있습니다.

2. Java 프로젝트 설정

  1. Java 프로젝트에 ActiveMQ의 Java 클라이언트 라이브러리를 추가합니다. Maven을 사용한다면 pom.xml 파일에 다음 의존성을 추가합니다:
<dependencies>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
        <version>5.16.2</version>
    </dependency>
</dependencies>
  1. Java 코드에서 ActiveMQ를 사용할 준비를 합니다. 다음은 Producer와 Consumer를 작성하는 예제입니다:
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;

public class ActiveMQExample {

    public static void main(String[] args) {
        try {
            // ActiveMQ 연결 설정
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // Producer: 메시지 전송
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Queue destination = session.createQueue("example.queue");
            MessageProducer producer = session.createProducer(destination);
            
            TextMessage message = session.createTextMessage();
            message.setText("Hello, ActiveMQ!");
            producer.send(message);

            // Consumer: 메시지 수신
            MessageConsumer consumer = session.createConsumer(destination);
            Message receivedMessage = consumer.receive();
            if (receivedMessage instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) receivedMessage;
                System.out.println("Received message: " + textMessage.getText());
            }

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

위 코드에서 tcp://localhost:61616는 ActiveMQ 브로커의 주소를 나타냅니다. 만약 호스트와 포트 번호가 다르다면 해당 정보로 변경해야 합니다.

3. 실행 및 결과 확인

위의 예제 코드를 실행하면 Producer가 “Hello, ActiveMQ!”라는 메시지를 큐에 보내고, Consumer가 해당 메시지를 수신하여 콘솔에 출력합니다. ActiveMQ 관리 콘솔에서도 메시지 큐의 상태를 확인할 수 있습니다.

결론

Apache ActiveMQ를 사용하면 메시지 큐를 통해 비동기 처리를 간단하게 구현할 수 있습니다. 프로듀서로 메시지를 전송하고, 컨슈머에서 해당 메시지를 받아 처리하는 방식을 사용하면, 시스템 간의 통신 및 비동기 작업 처리에 유용합니다.