ActiveMQ 작업할당

2022. 9. 3. 09:42IT

ActiveMQ란 ?

ActiveMQ는 메시지 브로커이다. 

즉, 메시지를 전달해주는 기능을 하고 있다. 

부동산계약으로 치면 공인중개사 같은 역할을 한다.  집을 팔려고하는 사람과 살려고 하는 사람을 이어주고 계약을 하게 한다.

 

ActiveMQ는 클라이언트 간 메시지를 송수신 할 수 있는 오픈소스이다.

 

ActiveMQ 구성과 메시지 처리 구조

구성은 메시지를 생산하는(보내는) Producer, 메시지를 소비하는(받는) Consumer,

Producer와 Consumer의 메시지를 중개하는 ActiveMQ(메시지브로커 역할) 가 있다. 

 

ActiveMQ가 메시지 처리하는 방법은 Queue와 Topic 이 있다.

 

Queue

  • 메시지를 받는 Consumer가 다수일 때 연결된 순서로 메시지를 제공한다.

Topic

  • 메시지를 받는 Consumer가 다수일 때 동일한 메시지를 모두에게 제공한다. (네트워크에서 broadcast)

ActiveMQ 설치와 실행

  • https://activemq.apache.org/components/classic/download/ 다운로드 해서 설치
  • 프로듀서에 메시지를 보내는 소스 작성
  • 컨슈머에 메시지를 받는 소스 작성
  • ActiveMQ와 메시지를 주고 받기 위해 프로듀서와 컨슈머에 8161 port, ActiveMQ 웹관릴페이지 접속하기 위한 61616 port 오픈

 

ActiveMQ를 이용한 작업할당

작업 프로세스

  • 구축환경을 먼저 안내드리면, 매니저를 통해 다수의 에이전트에 작업할당
  • 매니저는 DB에서 작업을 조회하고, 작업메시지를 ActiveMQ에 전달
  • 메시지를 받은 에이전트들은 작업 처리에 평균 10분이상 소요
  • 매니저는 프로듀서, 에이전트는 컨슈머

현상

  • 매니저에서 보낸 메시지들은 ActiveMQ를 통해 에이전트가 수신하고 작업 처리
  • 에이전트는 작업 메시지를 받으면 작업을 수행하는 동안 메시지를 처리 불가하며, 이를 슬로우 컨슈머라고 함
  • ActiveMQ는 queue방식에서 메시지를 전달할 때, 라운드로빈 방식으로 메시지를 전달
  • 에이전트가 작업을 종료해도 메시지 수신 차례가 되지 않으면 메시지를 수신하지 않았음
  • 작업마다 처리하는 시간이 다를 경우, 메시지를 받지 못하고 대기하는 경우가 발생하여 효율적인 작업 할당이 이루어지지 않음
  • 메시지는 pending message 상태로 변경됨

솔루션

  • 라운드로빈방식으로 메시지를 수신하는 것이 아니라, 작업이 완료되는 즉시 메시지 수신하도록  변경
  • 슬로우 컨슈머를 처리하기 위해서는 prefetch limit을 이용
  • 컨슈머의 prefetch size를 0으로 설정하여 메시지큐에서 메시지를 push하지 않고, 컨슈머가 작업 종료 시 큐의 메시지를 poll 하도록 변경
  • 결과, 컨슈머에서 작업 종료 시 메시지 즉시 수신

관련 자료

https://activemq.apache.org/what-is-the-prefetch-limit-for.html

 

ActiveMQ

What is the Prefetch Limit For?

activemq.apache.org

https://activemq.apache.org/destination-options

 

ActiveMQ

 

activemq.apache.org

 

반응형