@@ -4,16 +4,27 @@ const generator = require("../utils/generateQueues");
4
4
const matching_exchange_name = "matching_exchange" ;
5
5
const dead_letter_exchange_name = "dead_letter_exchange" ;
6
6
const dead_letter_queue_name = "dead_letter_queue" ;
7
- const cancel_queue_name = "cancel_queue" ;
8
- const difficulties = [ "easy" , "medium" , "hard" ] ;
9
- const languages = [ "python" , "java" , "cplusplus" ] ;
10
-
11
- const queueNames = generator . generateQueueNames (
12
- generator . generateCombinations ( difficulties , languages )
13
- ) ;
7
+ // const cancel_queue_name = "cancel_queue";
8
+ const difficulties = [ "easy" , "medium" , "hard" , "any" ] ;
9
+ const axios = require ( 'axios' ) ;
10
+ // Matching Service code
11
+ const questionServiceHost = process . env . QUESTION_SERVICE_HOST || 'localhost' ;
12
+ const categoryAPIUrl = `http://${ questionServiceHost } :3001/api/categories` ;
13
+
14
+ let queueNamesPromise = axios . get ( categoryAPIUrl )
15
+ . then ( response => {
16
+ const categories = response . data . map ( category => category . name . toLowerCase ( ) . replace ( / \s + / g, '-' ) ) ;
17
+ console . log ( "categories from api: " , categories )
18
+ return generator . generateQueueNames ( generator . generateCombinations ( difficulties , categories ) ) ;
19
+ } )
20
+ . catch ( error => {
21
+ console . error ( "Error fetching categories:" , error ) ;
22
+ return [ ] ; // Return an empty array if categories couldn't be fetched
23
+ } ) ;
14
24
15
25
async function setupRabbitMQ ( ) {
16
26
try {
27
+ const queueNames = await queueNamesPromise ;
17
28
const connection = await amqp . connect ( process . env . RABBITMQ_URL ) ;
18
29
19
30
if ( ! connection ) {
@@ -30,30 +41,28 @@ async function setupRabbitMQ() {
30
41
31
42
// Declare and bind all main queues with TTL and DLQ bindings
32
43
for ( let queueName of queueNames ) {
33
- await channel . deleteQueue ( queueName ) ; // Ensure we start fresh for each setup
44
+ await channel . deleteQueue ( queueName ) ; // Ensure we start fresh for each setup
34
45
35
46
await channel . assertQueue ( queueName , {
36
47
durable : true ,
37
48
arguments : {
38
- 'x-message-ttl' : 10000 , // 60 seconds TTL
39
- 'x-dead-letter-exchange' : dead_letter_exchange_name // Bind to dead-letter exchange
49
+ 'x-message-ttl' : 10000 , // TTL for messages in the queue
50
+ 'x-dead-letter-exchange' : dead_letter_exchange_name // Bind to dead-letter exchange
40
51
}
41
52
} ) ;
42
53
43
54
await channel . bindQueue ( queueName , matching_exchange_name , queueName ) ; // Bind to exchange
44
55
}
45
56
46
- // Delete DLQ before asserting it
57
+ // Delete and recreate the DLQ
47
58
await channel . deleteQueue ( dead_letter_queue_name ) ;
48
-
49
- // Declare the dead-letter queue and bind it to the dead-letter exchange
50
59
await channel . assertQueue ( dead_letter_queue_name , { durable : true } ) ;
51
60
await channel . bindQueue ( dead_letter_queue_name , dead_letter_exchange_name , '' ) ; // Bind with no routing key
52
61
53
- // Declare and bind the cancel queue
54
- await channel . deleteQueue ( cancel_queue_name ) ; // Delete any existing cancel queue
55
- await channel . assertQueue ( cancel_queue_name , { durable : true } ) ; // Declare the cancel queue
56
- await channel . bindQueue ( cancel_queue_name , matching_exchange_name , 'cancel' ) ; // Bind with the "cancel" routing key
62
+ // // Delete and recreate the cancel queue
63
+ // await channel.deleteQueue(cancel_queue_name);
64
+ // await channel.assertQueue(cancel_queue_name, { durable: true });
65
+ // await channel.bindQueue(cancel_queue_name, matching_exchange_name, 'cancel'); // Bind with the "cancel" routing key
57
66
58
67
console . log ( "RabbitMQ setup complete with queues, DLQ, and bindings." ) ;
59
68
@@ -64,4 +73,5 @@ async function setupRabbitMQ() {
64
73
}
65
74
}
66
75
67
- module . exports = { setupRabbitMQ, matching_exchange_name, queueNames, dead_letter_queue_name , cancel_queue_name} ;
76
+ // module.exports = { setupRabbitMQ, matching_exchange_name, queueNamesPromise, dead_letter_queue_name, cancel_queue_name };
77
+ module . exports = { setupRabbitMQ, matching_exchange_name, queueNamesPromise, dead_letter_queue_name } ;
0 commit comments