-
Notifications
You must be signed in to change notification settings - Fork 0
/
Queue.js
64 lines (54 loc) · 1.73 KB
/
Queue.js
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Video 35 17 configurando a fila com redis
import Bee from 'bee-queue';
import CancellationMail from '../app/jobs/CancellationMail';
import redisConfig from '../config/redis';
const jobs = [CancellationMail]; // Assim como usado nos Models
class Queue {
constructor() {
this.queues = {};
this.init(); // dividir em outro metodo
} // construct
init() {
// pode-se usar o Map ou forEach
jobs.forEach(({ key, handle }) => {
// desestruturado
// this.queues[key] = new Bee(key, {
// redis: redisConfig,
// }), //this
this.queues[key] = {
bee: new Bee(key, {
// objeto: fila
redis: redisConfig, // grava o trabalho no Redis
}), // this
handle, // vem lá do Job, metodo que vai processar
};
}); // foreach
} // init
/**
* Adicionar novos trabalhos dentro da fila
* @param queue a qual fila eu quero adicionar novo trabalho (por enquanto somente a CancellationMail)
* @param job a tarefa que será adicionada
* add(CancellationMail, appointment)
*/
add(queue, job) {
return this.queues[queue].bee.createJob(job).save();
} // add
/**
* Metodo para processar a fila, percorre toda a fila de trabalhos
* executando a tarefa
*/
processQueue() {
jobs.forEach(job => {
// fila, metodo = fila daquele job
const { bee, handle } = this.queues[job.key];
bee
.on('failed', this.handleFailure) // Video 36 18 monitorando falhas na fila
.process(handle); // processa em tempo real em background
});
} // processQueue
handleFailure(job, err) {
// Video 36 18 monitorando falhas na fila
console.log(`QUEUE ${job.queue.name}: FAILED`, err);
}
} // class
export default new Queue();