[java] Apache ActiveMQ와 웹 서비스의 통합

Apache ActiveMQ는 오픈 소스 메시지 브로커로서, 메시지 큐 및 토픽 기반 아키텍처를 제공하여 분산 시스템 간의 비동기 통신을 지원합니다. 이 글에서는 Apache ActiveMQ와 웹 서비스를 통합하는 방법에 대해 알아보겠습니다.

1. Apache ActiveMQ 설치

Apache ActiveMQ를 사용하기 위해서는 우선 설치해야 합니다. 아파치 홈페이지에서 다운로드 링크를 통해 원하는 버전의 ActiveMQ를 내려받고, 설치하면 됩니다. 설치 후에는 ActiveMQ가 로컬 시스템에서 실행 중인지 확인해야 합니다.

2. 웹 서비스와 ActiveMQ의 연결 설정

ActiveMQ와 웹 서비스를 연결하기 위해서는 먼저 ActiveMQ의 설정 파일을 수정해야 합니다. ActiveMQ 설치 디렉토리 안에 있는 activemq.xml 파일을 열어 다음과 같이 수정합니다.

<transportConnectors>
  <transportConnector name="http" uri="http://localhost:61616" />
</transportConnectors>

위 설정은 ActiveMQ가 웹 서비스와의 통신을 위해 61616 포트를 사용하도록 설정하는 것입니다.

3. 웹 서비스에서 ActiveMQ로 메시지 보내기

웹 서비스에서 ActiveMQ로 메시지를 보내기 위해서는 ActiveMQ의 Java 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다.

<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-core</artifactId>
  <version>{your-active-mq-version}</version>
</dependency>

웹 서비스의 코드에서는 다음과 같이 ActiveMQ를 초기화하고, 메시지를 보내는 코드를 작성할 수 있습니다.

import javax.jms.*;

public class WebService {

    private ConnectionFactory connectionFactory;
    private Connection connection;
    private Session session;
    private Destination destination;
    private MessageProducer producer;

    public void initialize() {
        // ActiveMQ 연결 설정
        connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        try {
            connection = connectionFactory.createConnection();
            connection.start();
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            destination = session.createQueue("myQueue");
            producer = session.createProducer(destination);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

    public void sendMessage(String message) {
        try {
            TextMessage textMessage = session.createTextMessage(message);
            producer.send(textMessage);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

    public void close() {
        try {
            producer.close();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 initialize() 메서드는 ActiveMQ 연결을 초기화하고, sendMessage() 메서드는 메시지를 보내는 역할을 합니다. close() 메서드는 연결을 종료하는 역할을 합니다. 이렇게 작성한 웹 서비스 코드에서 메시지를 보내려면 initialize()를 먼저 호출한 후 sendMessage()를 호출하면 됩니다.

4. ActiveMQ에서 웹 서비스로 메시지 수신하기

ActiveMQ에서 웹 서비스로 메시지를 수신하기 위해서는 웹 서비스의 주소를 설정해야 합니다. ActiveMQ 설치 디렉토리 안에 있는 jetty.xml 파일을 열어 다음과 같이 수정합니다.

<destinationInterceptors>
  <virtualDestinationInterceptor>
    <virtualDestinations>
      <compositeQueue name="myQueue">
        <forwardTo>
          <queue physicalName="http://localhost:8080/myWebService" />
        </forwardTo>
      </compositeQueue>
    </virtualDestinations>
  </virtualDestinationInterceptor>
</destinationInterceptors>

위 설정은 ActiveMQ의 myQueue라는 가상 대상을 웹 서비스의 주소인 http://localhost:8080/myWebService로 전달하도록 설정하는 것입니다.

웹 서비스에서는 위에서 설정한 주소로 요청을 받아 해당 메시지를 처리할 수 있습니다.

결론

이제 Apache ActiveMQ와 웹 서비스를 통합하는 방법에 대해 알아보았습니다. ActiveMQ를 사용하여 웹 서비스와의 비동기 통신을 구현할 수 있으며, 이를 통해 시스템 간의 확장성과 유연성을 향상시킬 수 있습니다.

더 자세한 내용은 Apache ActiveMQ 공식 문서를 참조하시기 바랍니다.