ActiveMQ 작업할당
2022. 9. 3. 09:42ㆍIT
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
반응형
'IT' 카테고리의 다른 글
플러터 flutter 안드로이드스튜디오 설치 (0) | 2023.07.15 |
---|---|
플러터 설치 flutter (0) | 2023.07.15 |
open GoP, closed GoP 트랜스코딩, partial 작업 (1) | 2023.03.21 |
플러터(flutter) 업그레이드 (2.x > 3.x) (0) | 2022.09.17 |
드롭프레임 (drop frame) (0) | 2022.09.04 |