Java/Etc

ActiveMQ 사용하기

체리필터 2010. 3. 23. 17:16
728x90
반응형
실 서비스 도중에 대량의 작업을 동기식으로 작업하려면 부담이 되는 경우가 많다.
이럴 경우에는 비동기식으로 작업을 하게 되는데, 보통 Queue에 작업해야 할 목록을 집어 넣어두고, 나중에 Cosumer가 해당 작업을 하도록 만드는 것이 일반적이다.
이런 작업을 하는데 유용한 도구가 ActiveMQ이며 이번 주소록 프로젝트를 하면서 ActiveMQ를 사용하게 되어 정리차원에서 블로그에 올려본다.

설치하기 이전에 우선 환경을 셋팅해야 한다.

JDK는 1.5.x 버젼 이상 설치되어 있어야 하며, " JAVA_HOME" 환경 변수는 JDK가 설치된 경로로 잡혀 있어야 한다. Maven은 1.0.2 이상 설치되어 있어야 한다.(Maven은 소스 설치 또는 개발자 버젼 설치를 위해 필요한 듯...)
또한 관련 JAR 파일들은 미리 classpath에 있어야 한다.
따라서 Maven을 사용한다면 dependencies 아래 아래와 같이 추가하면 된다.



<!-- For Active MQ -->
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-core</artifactId>
    <version>5.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-web</artifactId>
    <version>5.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring</artifactId>
    <version>3.3</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>2.5.6.SEC01</version>
</dependency>

 환경 셋팅을 다했다면 ActiveMQ를 다운로드 해서 설치해야 한다. 다운로드는 http://activemq.apache.org/download.html 에서 다운 받을 수 있으며, 현재 기준으로 안정 버젼은 5.3.0이다.

설치는 다운로드 받은 파일을 적당한 곳에 풀어주면 된다.

설치 후 ActiveMQ를 실행 시킨다.

cd [activemq_install_dir]
bin\activemq

위와 같이 하던가 아니면 설치 디렉토리의 activemq.bat 파일을 더블클릭 해도 된다.
Unix(Linux) 환경에서는 아래와 같이 하면 된다.

cd [activemq_install_dir]
bin/activemq

OR

bin/activemq > /tmp/smlog  2>&1 &;
Note: /tmp/smlog may be changed to another file name.

ActiveMQ의 자세한 Start 방법은 http://activemq.apache.org/version-5-getting-started.html#Version5GettingStarted-StartingActiveMQ 를 참고하면 된다.

ActiveMQ를 실행 후 제대로 돌고 있는지 확인하기 위해서는 61616 포트를 확인해 보면 된다.

Windows

netstat -an|find "61616"
  TCP    0.0.0.0:61616          0.0.0.0:0              LISTENING

Unix(Linux)

netstat -an|grep 61616
tcp        0      0 :::61616                    :::*                        LISTEN 

위와 같이 61616 포트를 Listen 하고 있다면 제대로 ActiveMQ가 실행 되고 있는 것이다.
또한 위와 같이 ActiveMQ가 실행되고 있는 것이 확인되면 아래의 url로 접근해서 Queue의 상태를 확인해 볼 수 있다.

http://localhost:8161/admin

물론 해당 서버가 로컬이 아니라면 위의 localhost 도메인을 적절히 수정해야 할 것이다.

기본적으로 ActiveMQ를 위와 같은 방식으로 띄운다면 ActiveMQ가 설치된 디렉토리의 conf 디렉토리 밑에 있는 activemq.xml 파일을 가지고 뜬다. 하지만 원하는 디렉토리 밑에 있는 activemq.xml을 참조하도록 하기 위해서는 아래와 같이 띄우면 된다.

activemq설치디렉토리/bin/activemq xbean:file:원하는소스가 있는 디렉토리

activemq.xml에서는 기본적으로 아래와 같은 셋팅을 하면 된다.


policyEntry 부분에 queue 이름만 정확히 넣어 주고 여기서 셋팅한 이름을 applicationContext.xml 파일에서 사용하면 된다.
jetty 부분은 admin으로 모니터링 할 내용을 적어 둔 것이다.
덧. activemq.base는 상단에서 단순히 properties 파일 선언하고 해당 부분에서 ActiveMQ가 설치된 디렉토리를 지정한 것이다.

* applicationContext.xml 파일의 설정


위와 같이 설정이 모두 마쳐 졌다면 프로그램을 만들 차례이다.
우선 가장 기본이 되는 리스너는 다음과 같은 형식으로 만들어 주면 된다.


위 클래스는 주소를 수정할 경우 registerQueue 메소드를 호출해서 Queue에 한개의 아이디를 쌓고, Listener에서 Queue에 데이터가 들어오면 pullFromQueueAndModifyAddress 메소드를 호출해서 수정한 아이디의 주소를 이용하여 친구들 주소들 모두를 수정해 주는 것이다.

우선 applicationContext.xml에서 선언한 jmsTemplate 관련 setter를 선언해 주고 기본이 되는 2가지 메소드를 만들어 주면 된다.
registerQueue 메소드는 Queue에 등록하는 메소드이며 메소드 등록 시 jmsTemplate를 이용하면 된다. 해당 메소드는 별도의 외부 클래스에서 호출해 주는 것이므로 알아서 테스트 해 보면 될 것이다.
Queue에 데이터가 등록되면 Listener가 알아서 감지하고 pullFromQueueAndModifyAddress 메소드가 실행 된다.(applicationContext.xml의 listener list에 선언한 부분)
안의 비즈니스 로직은 알아서 만들면 되는 것이고 이렇게 되면 http://localhost:8161/admin/queues.jsp 에서 해당 내용이 제대로 적용 되었는지 확인해 볼 수 있다.

보통 Queue에 Data가 쌓이게 되면 바로 바로 Consumer가 작동하게 되므로 서버를 Debug 모드로 돌려 놓고 BreakPoint를 찍어 놓았다면 registerQueue를 실행하는 즉시 디버거가 작동하게 될 것이다.

덧. 백업 용도로 정신 없이 작성하다 보니 내가 써 놓고도 내가 무슨 말이지 모르겠다 ^^ 적당히 알아서 들으시면 될 것 같다. 삽질은 프로그램의 기본 ^^
덧2. ActiveMQ의 설정 및 시작 방법 등 자세한 내용은 http://users.handysoft.co.kr/~wsko/articles/activemq-guide/index.html에 더 잘 나온 것 같다.



728x90
반응형