Node.js / NestJS

āļ„āļīāļ§āļ”āđ‰āļ§āļĒ Bull

Bull queues, processors, jobs, jobs āļ—āļĩāđˆāļŦāļ™āđˆāļ§āļ‡āđ€āļ§āļĨāļē, āļĨāļģāļ”āļąāļšāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļ, retries, āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ

20 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒÂ·
Mid-Level
1

Bull āļ„āļ·āļ­āļ­āļ°āđ„āļĢāđƒāļ™āļšāļĢāļīāļšāļ—āļ‚āļ­āļ‡ NestJS?

āļ„āļģāļ•āļ­āļš

Bull āđ€āļ›āđ‡āļ™āđ„āļĨāļšāļĢāļēāļĢāļĩ Node.js āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢāļ„āļīāļ§ (queues) āđāļšāļšāļ–āļēāļ§āļĢāļ—āļĩāđˆāļ­āļīāļ‡āļāļąāļš Redis āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļĢāļąāļ™āļ‡āļēāļ™āđ€āļšāļ·āđ‰āļ­āļ‡āļŦāļĨāļąāļ‡āđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠ āļˆāļąāļ”āļāļēāļĢāļĨāļģāļ”āļąāļšāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļ retries āđāļĨāļ° delayed jobs āđ„āļ”āđ‰ NestJS āļĄāļĩāđ‚āļĄāļ”āļđāļĨ @nestjs/bull āļ—āļĩāđˆāļĢāļ§āļĄ Bull āđ€āļ‚āđ‰āļēāļāļąāļšāļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļšāļšāđ‚āļĄāļ”āļđāļĨāļ‚āļ­āļ‡ framework āđ‚āļ”āļĒāļ•āļĢāļ‡ āļ—āļģāđƒāļŦāđ‰āļŠāļĢāđ‰āļēāļ‡ workers āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢ jobs āļ—āļĩāđˆāļŦāļ™āļąāļāļŦāļĢāļ·āļ­āļ—āļģāļ‡āļēāļ™āļĒāļēāļ§āļ™āļēāļ™āđ„āļ”āđ‰āļ‡āđˆāļēāļĒ

2

processor āļĄāļĩāļšāļ—āļšāļēāļ—āļ­āļĒāđˆāļēāļ‡āđ„āļĢāđƒāļ™ Bull?

āļ„āļģāļ•āļ­āļš

processor āļ„āļ·āļ­āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ—āļĩāđˆāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ jobs āļˆāļēāļ queue āđ€āļĄāļ·āđˆāļ­āļĄāļĩ job āļ–āļđāļāđ€āļžāļīāđˆāļĄāđ€āļ‚āđ‰āļēāđ„āļ›āđƒāļ™ queue Bull āļˆāļ°āđ€āļĢāļĩāļĒāļ processor āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđ€āļžāļ·āđˆāļ­āļĢāļąāļ™āļĨāļ­āļˆāļīāļāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ processor āļĢāļąāļš job āđ€āļ›āđ‡āļ™āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļœāđˆāļēāļ™ job.data āđ„āļ”āđ‰ āļĄāļąāļ™āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āđ‡āļ™āđāļšāļš synchronous āļŦāļĢāļ·āļ­ asynchronous āđāļĨāļ°āļ•āđ‰āļ­āļ‡āļ„āļ·āļ™āļ„āđˆāļēāļŦāļĢāļ·āļ­ Promise āđ€āļžāļ·āđˆāļ­āđāļˆāđ‰āļ‡āļ§āđˆāļē job āđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“āđŒ

3

āļˆāļ°āđ€āļžāļīāđˆāļĄ job āđ€āļ‚āđ‰āļēāđ„āļ›āđƒāļ™ queue āļ‚āļ­āļ‡ Bull āđƒāļ™ NestJS āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

āđƒāļ™āļāļēāļĢāđ€āļžāļīāđˆāļĄ job āđƒāļŦāđ‰ inject queue āļœāđˆāļēāļ™ @InjectQueue('queueName') āđāļĨāđ‰āļ§āđƒāļŠāđ‰āđ€āļĄāļ˜āļ­āļ” add() āđ€āļĄāļ˜āļ­āļ”āļ™āļĩāđ‰āļĢāļąāļšāļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāđ€āļŠāļĢāļīāļĄ āđ„āļ”āđ‰āđāļāđˆ āļŠāļ·āđˆāļ­ job, āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļˆāļ°āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ (payload) āđāļĨāļ°āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāđ€āļŠāđˆāļ™ delay, priority, attempts āđ€āļĄāļ˜āļ­āļ”āļˆāļ°āļ„āļ·āļ™ Promise āļ—āļĩāđˆāļĄāļĩ job āļ—āļĩāđˆāļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āļžāļĢāđ‰āļ­āļĄ ID āđ€āļ‰āļžāļēāļ° āļ—āļģāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļēāļĄāļŦāļĢāļ·āļ­āļˆāļąāļ”āļāļēāļĢāđƒāļ™āļ āļēāļĒāļŦāļĨāļąāļ‡āđ„āļ”āđ‰

4

Redis āļĄāļĩāļŦāļ™āđ‰āļēāļ—āļĩāđˆāļ­āļ°āđ„āļĢāđƒāļ™āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ‚āļ­āļ‡ Bull?

5

āļˆāļ°āļāļģāļŦāļ™āļ” delayed job āđƒāļ™ Bull āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

+17 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Node.js / NestJS āļ­āļ·āđˆāļ™āđ†

āļžāļ·āđ‰āļ™āļāļēāļ™ Node.js

Junior
20 āļ„āļģāļ–āļēāļĄ

Core API āļ‚āļ­āļ‡ Node.js

Junior
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠ

Junior
25 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ Express.js

Junior
20 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ NestJS

Junior
23 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļ­āļāđāļšāļš REST API

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āđāļĨāļ° DTO

Junior
20 āļ„āļģāļ–āļēāļĄ

āđ€āļ­āļāļŠāļēāļĢ API āđāļĨāļ° Contract

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŦāļ™āđˆāļ§āļĒ (Unit Testing)

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļ•āļēāļĢāļēāļ‡āļ‡āļēāļ™

Junior
15 āļ„āļģāļ–āļēāļĄ

Module āđāļĨāļ° DI āļ‚āļ­āļ‡ NestJS

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™āļ”āđ‰āļ§āļĒ JWT

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒāđāļĨāļ° RBAC

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ”āđ‰āļ§āļĒ TypeORM

Mid-Level
30 āļ„āļģāļ–āļēāļĄ

Prisma ORM

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

Middleware āđāļĨāļ° Interceptor

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒ

Mid-Level
15 āļ„āļģāļ–āļēāļĄ

WebSockets

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

GraphQL āļāļąāļš NestJS

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđāļšāļš End-to-End

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđāļ„āļŠāļ”āđ‰āļ§āļĒ Redis

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

DevOps, Logging āđāļĨāļ° CI/CD

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

Docker āđāļĨāļ° Containerization

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āđ„āļĄāđ‚āļ„āļĢāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ

Senior
30 āļ„āļģāļ–āļēāļĄ

āđāļ™āļ§āļ—āļēāļ‡āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ

Senior
25 āļ„āļģāļ–āļēāļĄ

āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļāļēāļĢ Deploy āļšāļ™ Cloud

Senior
30 āļ„āļģāļ–āļēāļĄ

āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļ Node.js / NestJS āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ›

āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ„āļģāļ–āļēāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ” flashcards āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„ āđāļšāļšāļāļķāļāļŦāļąāļ” code review āđāļĨāļ°āļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āđ€āļĢāļīāđˆāļĄāđƒāļŠāđ‰āļŸāļĢāļĩ