Post

Bull queue 를 활용한 Job Manager 에 EventEmitter 사용하기

Bull queue 를 활용한 Job Manager 에 EventEmitter 사용하기

Job Manager 클래스에 EventEmitter 상속하기

  • Consumer

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
      const EventEmitter = require('events');
      const Queue = require('bull');
        
      class JobManager extends EventEmitter {
        constructor(name) {
        super();
          this.name = name;
          this.queue = null;
        }
          
        init() {
          if (!this.queue) {
            this.queue = new Queue(this.name, 'redis://127.0.0.1:6379');
            this.queue.process(async (job, done) => {
              const { eventId, source } = job.data;
              await this.doSomething(source);
              this.emit(eventId, 'finished');
            });
          }
        }
          
        addJob(eventId, source, callback) {
          this.queue.add({ eventId, source })
          .then(() => callback); // add event handler
        }
        doSomething(source) {
          // process with job data
        }
      }
    
  • Provider

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      const jobManager = new JobManager('new job');
      jobManager.init();
      jobManager.addJob(
        'new job 1', 
        source, // job data
        () => jobManager.once('new job 1', result => {
          // process result
          console.log(result); // 'finished'
      });
    
  • 옵저버 패턴과 EventEmitter 관계

    FT_2021-03-31 02_47_08 864

This post is licensed under CC BY 4.0 by the author.