forked from goldbergyoni/nodejs-testing-best-practices
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmessage-queue-consumer.js
36 lines (29 loc) · 1.04 KB
/
message-queue-consumer.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
const MessageQueueClient = require('../libraries/message-queue-client');
const { errorHandler, AppError } = require('../error-handling');
const orderService = require('../business-logic/order-service');
// This is message queue entry point. Like API routes but for message queues.
class QueueConsumer {
constructor(messageQueueClient) {
this.messageQueueClient = messageQueueClient;
}
async start() {
await this.consumeUserDeletionQueue();
}
async consumeUserDeletionQueue() {
await this.messageQueueClient.consume('user.deleted', async (message) => {
// ️️️Validate message
const newMessageAsObject = JSON.parse(message);
if (!newMessageAsObject.id) {
throw new AppError('invalid-message', 'Unknown message schema');
}
await orderService.deleteOrder(newMessageAsObject.id);
});
}
}
process.on('uncaughtException', (error) => {
errorHandler.handleError(error);
});
process.on('unhandledRejection', (reason) => {
errorHandler.handleError(reason);
});
module.exports = { QueueConsumer };