@@ -139,6 +139,10 @@ export class MarQS {
139
139
return this . redis . zcard ( this . keys . queueKey ( env , queue , concurrencyKey ) ) ;
140
140
}
141
141
142
+ public async lengthOfEnvQueue ( env : AuthenticatedEnvironment ) {
143
+ return this . redis . zcard ( this . keys . envQueueKey ( env ) ) ;
144
+ }
145
+
142
146
public async oldestMessageInQueue (
143
147
env : AuthenticatedEnvironment ,
144
148
queue : string ,
@@ -1074,6 +1078,7 @@ export class MarQS {
1074
1078
concurrencyKey ,
1075
1079
envConcurrencyKey ,
1076
1080
orgConcurrencyKey ,
1081
+ this . keys . envQueueKeyFromQueue ( message . queue ) ,
1077
1082
message . queue ,
1078
1083
message . messageId ,
1079
1084
JSON . stringify ( message ) ,
@@ -1111,6 +1116,7 @@ export class MarQS {
1111
1116
currentConcurrencyKey ,
1112
1117
envCurrentConcurrencyKey ,
1113
1118
orgCurrentConcurrencyKey ,
1119
+ this . keys . envQueueKeyFromQueue ( messageQueue ) ,
1114
1120
messageQueue ,
1115
1121
String ( Date . now ( ) ) ,
1116
1122
String ( this . options . defaultEnvConcurrency ) ,
@@ -1187,6 +1193,7 @@ export class MarQS {
1187
1193
concurrencyKey ,
1188
1194
envConcurrencyKey ,
1189
1195
orgConcurrencyKey ,
1196
+ this . keys . envQueueKeyFromQueue ( messageQueue ) ,
1190
1197
messageId ,
1191
1198
messageQueue
1192
1199
) ;
@@ -1234,6 +1241,7 @@ export class MarQS {
1234
1241
envConcurrencyKey ,
1235
1242
orgConcurrencyKey ,
1236
1243
visibilityQueue ,
1244
+ this . keys . envQueueKeyFromQueue ( messageQueue ) ,
1237
1245
messageQueue ,
1238
1246
messageId ,
1239
1247
String ( Date . now ( ) ) ,
@@ -1347,14 +1355,15 @@ export class MarQS {
1347
1355
1348
1356
#registerCommands( ) {
1349
1357
this . redis . defineCommand ( "enqueueMessage" , {
1350
- numberOfKeys : 6 ,
1358
+ numberOfKeys : 7 ,
1351
1359
lua : `
1352
1360
local queue = KEYS[1]
1353
1361
local parentQueue = KEYS[2]
1354
1362
local messageKey = KEYS[3]
1355
1363
local concurrencyKey = KEYS[4]
1356
1364
local envCurrentConcurrencyKey = KEYS[5]
1357
1365
local orgCurrentConcurrencyKey = KEYS[6]
1366
+ local envQueue = KEYS[7]
1358
1367
1359
1368
local queueName = ARGV[1]
1360
1369
local messageId = ARGV[2]
@@ -1367,6 +1376,9 @@ redis.call('SET', messageKey, messageData)
1367
1376
-- Add the message to the queue
1368
1377
redis.call('ZADD', queue, messageScore, messageId)
1369
1378
1379
+ -- Add the message to the env queue
1380
+ redis.call('ZADD', envQueue, messageScore, messageId)
1381
+
1370
1382
-- Rebalance the parent queue
1371
1383
local earliestMessage = redis.call('ZRANGE', queue, 0, 0, 'WITHSCORES')
1372
1384
if #earliestMessage == 0 then
@@ -1383,7 +1395,7 @@ redis.call('SREM', orgCurrentConcurrencyKey, messageId)
1383
1395
} ) ;
1384
1396
1385
1397
this . redis . defineCommand ( "dequeueMessage" , {
1386
- numberOfKeys : 8 ,
1398
+ numberOfKeys : 9 ,
1387
1399
lua : `
1388
1400
-- Keys: childQueue, parentQueue, concurrencyLimitKey, envConcurrencyLimitKey, orgConcurrencyLimitKey, currentConcurrencyKey, envCurrentConcurrencyKey, orgCurrentConcurrencyKey
1389
1401
local childQueue = KEYS[1]
@@ -1394,6 +1406,7 @@ local orgConcurrencyLimitKey = KEYS[5]
1394
1406
local currentConcurrencyKey = KEYS[6]
1395
1407
local envCurrentConcurrencyKey = KEYS[7]
1396
1408
local orgCurrentConcurrencyKey = KEYS[8]
1409
+ local envQueueKey = KEYS[9]
1397
1410
1398
1411
-- Args: childQueueName, currentTime, defaultEnvConcurrencyLimit, defaultOrgConcurrencyLimit
1399
1412
local childQueueName = ARGV[1]
@@ -1438,6 +1451,7 @@ local messageScore = tonumber(messages[2])
1438
1451
1439
1452
-- Move message to timeout queue and update concurrency
1440
1453
redis.call('ZREM', childQueue, messageId)
1454
+ redis.call('ZREM', envQueueKey, messageId)
1441
1455
redis.call('SADD', currentConcurrencyKey, messageId)
1442
1456
redis.call('SADD', envCurrentConcurrencyKey, messageId)
1443
1457
redis.call('SADD', orgCurrentConcurrencyKey, messageId)
@@ -1474,7 +1488,7 @@ redis.call('SET', messageKey, messageData, 'GET')
1474
1488
} ) ;
1475
1489
1476
1490
this . redis . defineCommand ( "acknowledgeMessage" , {
1477
- numberOfKeys : 7 ,
1491
+ numberOfKeys : 8 ,
1478
1492
lua : `
1479
1493
-- Keys: parentQueue, messageKey, messageQueue, visibilityQueue, concurrencyKey, envCurrentConcurrencyKey, orgCurrentConcurrencyKey
1480
1494
local parentQueue = KEYS[1]
@@ -1484,6 +1498,7 @@ local visibilityQueue = KEYS[4]
1484
1498
local concurrencyKey = KEYS[5]
1485
1499
local envCurrentConcurrencyKey = KEYS[6]
1486
1500
local orgCurrentConcurrencyKey = KEYS[7]
1501
+ local envQueueKey = KEYS[8]
1487
1502
1488
1503
-- Args: messageId, messageQueueName
1489
1504
local messageId = ARGV[1]
@@ -1495,6 +1510,9 @@ redis.call('DEL', messageKey)
1495
1510
-- Remove the message from the queue
1496
1511
redis.call('ZREM', messageQueue, messageId)
1497
1512
1513
+ -- Remove the message from the env queue
1514
+ redis.call('ZREM', envQueueKey, messageId)
1515
+
1498
1516
-- Rebalance the parent queue
1499
1517
local earliestMessage = redis.call('ZRANGE', messageQueue, 0, 0, 'WITHSCORES')
1500
1518
if #earliestMessage == 0 then
@@ -1514,7 +1532,7 @@ redis.call('SREM', orgCurrentConcurrencyKey, messageId)
1514
1532
} ) ;
1515
1533
1516
1534
this . redis . defineCommand ( "nackMessage" , {
1517
- numberOfKeys : 7 ,
1535
+ numberOfKeys : 8 ,
1518
1536
lua : `
1519
1537
-- Keys: childQueueKey, parentQueueKey, visibilityQueue, concurrencyKey, envConcurrencyKey, orgConcurrencyKey, messageId
1520
1538
local messageKey = KEYS[1]
@@ -1524,6 +1542,7 @@ local concurrencyKey = KEYS[4]
1524
1542
local envConcurrencyKey = KEYS[5]
1525
1543
local orgConcurrencyKey = KEYS[6]
1526
1544
local visibilityQueue = KEYS[7]
1545
+ local envQueueKey = KEYS[8]
1527
1546
1528
1547
-- Args: childQueueName, messageId, currentTime, messageScore
1529
1548
local childQueueName = ARGV[1]
@@ -1547,6 +1566,9 @@ end
1547
1566
-- Enqueue the message into the queue
1548
1567
redis.call('ZADD', childQueueKey, messageScore, messageId)
1549
1568
1569
+ -- Enqueue the message into the env queue
1570
+ redis.call('ZADD', envQueueKey, messageScore, messageId)
1571
+
1550
1572
-- Rebalance the parent queue
1551
1573
local earliestMessage = redis.call('ZRANGE', childQueueKey, 0, 0, 'WITHSCORES')
1552
1574
if #earliestMessage == 0 then
@@ -1729,6 +1751,7 @@ declare module "ioredis" {
1729
1751
concurrencyKey : string ,
1730
1752
envConcurrencyKey : string ,
1731
1753
orgConcurrencyKey : string ,
1754
+ envQueue : string ,
1732
1755
queueName : string ,
1733
1756
messageId : string ,
1734
1757
messageData : string ,
@@ -1745,6 +1768,7 @@ declare module "ioredis" {
1745
1768
currentConcurrencyKey : string ,
1746
1769
envCurrentConcurrencyKey : string ,
1747
1770
orgCurrentConcurrencyKey : string ,
1771
+ envQueueKey : string ,
1748
1772
childQueueName : string ,
1749
1773
currentTime : string ,
1750
1774
defaultEnvConcurrencyLimit : string ,
@@ -1766,6 +1790,7 @@ declare module "ioredis" {
1766
1790
concurrencyKey : string ,
1767
1791
envConcurrencyKey : string ,
1768
1792
orgConcurrencyKey : string ,
1793
+ envQueueKey : string ,
1769
1794
messageId : string ,
1770
1795
messageQueueName : string ,
1771
1796
callback ?: Callback < void >
@@ -1779,6 +1804,7 @@ declare module "ioredis" {
1779
1804
envConcurrencyKey : string ,
1780
1805
orgConcurrencyKey : string ,
1781
1806
visibilityQueue : string ,
1807
+ envQueueKey : string ,
1782
1808
childQueueName : string ,
1783
1809
messageId : string ,
1784
1810
currentTime : string ,
0 commit comments