bull과 bullmq
bull
먼저 개발된 녀석이고, Redis 기반의 큐 시스템을 제공해주는 라이브러리임다! ioredis 라이브러리를 내부적으로 사용하고 있는디, 현재 유지보수만 하고 신기능 개발은 하고 있지 않음!!
bullmq
같은 개발진이 만든 bull의 후속작임다! 당근 ioredis 라이브러리 내부 지원하구, Redis Streams 기반으로 동작해서 성능과 확장성이 더 좋대유! 특히 분산 환경(cluster)에서 더 안정적이고, TypeScript 지원이 더 잘 된다능. 그리고 이쪽이 계속 개발되는 중이라 미래지향적이라면 이쪽을 선택!!
Redis Streams
Redis에서 제공하는 로그 기반의 메시지 큐 시스템이래요! 기존 Redis List 방식과 다른 점이 크게 둘인디, 첫번째는 스트림 기반으로 멀티 컨슈머 그룹을 지원한다는 점!! consumer는 큐의 데이터를 읽고 처리하는 주체, 대표적으로 서버들을 말하는 것이고, 즉 Redis의 데이터를 여러 서버가 동시에 접근할 수 있다는 것!! 두번째는 데이터를 보존한다는 점!! 기존 Redis List 방식의 큐는 처리한 데이터를 바로 제거하지만, Streams 방식은 처리한 데이터도 보존 가능하기 때문에, 만약 서버가 비정상적으로 중단된 경우에도, 처리되지 않은 작업을 다시 가져와 처리 가능합니다!!
BullMQ
Introduction
BullMQ는 Queue, Worker, QueueEvents, FlowProducer의 4가지 Class로 구성됩니다!! 첫번째인 Queue 클래스는 큐에 Jobs를 추가하는 기능 뿐 아니라, 큐를 대상으로 pausing, cleaning, getting data 등의 기초적인 조작 기능도 제공함다!!
Jobs
사용자에 의해 만들어진 큐에 저장될 수 있는 자료 구조, Jobs는 Workers에 의해 처리됨다!
두번째인 Workers 클래스는 Jobs를 처리할 수 있음다! 다수의 Workers를 보유할 수 있음다!! 동일 프로세스가 가동 중이거나, 다른 머신에서 별개의 프로세스를 가동하든 가능!! 워커들은 모두 큐에서 jobs를 consume한 후에 성공 또는 실패를 표시함다!!
Connections
Queue 클래스 작업을 시작하기 위해선 Redis 연결이 필수임다!! BullMQ는 자체적으로 ioredis 모듈을 활용하기 때문에, BullMQ에 넣은 연결 옵션들이 ioredis의 생성자로 전달됩니다!! 아무 입력도 하지 않는 경우 localhost 주소의 6379번 포트가 default 주소임다!!
BullMQ의 모든 클래스가 최소 하나의 Redis 연결을 필요로 하지만, 특정 상황에선 기존 연결들을 재활용 할 수 있슴다!! 예를 들어, Queue와 Worker 클래스는 기존 ioredis 인스턴스를 받아 쓸 수 있지만, QueueScheduler와 QueueEvents 클래스는 불가능합니다!! 왜냐면 후자의 두 클래스는 Redis 연결을 block해놔야하기 때문입니다!!
import { Queue, Worker } from 'bullmq';
// Create a new connection in every instance
const myQueue = new Queue('myqueue', {
connection: {
host: 'myredis.taskforce.run',
port: 32856,
},
});
const myWorker = new Worker('myqueue', async job => {}, {
connection: {
host: 'myredis.taskforce.run',
port: 32856,
},
});
참고한, 참고할 링크
https://docs.bullmq.io/guide/introduction
https://www.npmjs.com/package/bullmq
https://optimalbits.github.io/bull/
https://github.com/OptimalBits/bull?tab=readme-ov-file
https://chatgpt.com/share/67a36a9c-4738-8010-a545-205462b1b7f7
'TIL&WIL' 카테고리의 다른 글
250204 TIL - protoc 실습해보기 (0) | 2025.02.05 |
---|---|
250203 TIL - 심야 만담회의 순기능 (1) | 2025.02.04 |
250123 TIL - Connection Pool 실습 (0) | 2025.01.23 |
250122 TIL - ECS Architecture (0) | 2025.01.22 |
250120 TIL - 소수 관련 알고리즘 팁 (0) | 2025.01.20 |