@@ -438,6 +438,39 @@ export class RunQueue {
438
438
) ;
439
439
}
440
440
441
+ public async readMessageFromKey ( messageKey : string ) {
442
+ return this . #trace(
443
+ "readMessageFromKey" ,
444
+ async ( span ) => {
445
+ const rawMessage = await this . redis . get ( messageKey ) ;
446
+
447
+ if ( ! rawMessage ) {
448
+ return ;
449
+ }
450
+
451
+ const message = OutputPayload . safeParse ( JSON . parse ( rawMessage ) ) ;
452
+
453
+ if ( ! message . success ) {
454
+ this . logger . error ( `[${ this . name } ] Failed to parse message` , {
455
+ messageKey,
456
+ error : message . error ,
457
+ service : this . name ,
458
+ } ) ;
459
+
460
+ return ;
461
+ }
462
+
463
+ return message . data ;
464
+ } ,
465
+ {
466
+ attributes : {
467
+ [ SEMATTRS_MESSAGING_OPERATION ] : "receive" ,
468
+ [ SEMATTRS_MESSAGING_SYSTEM ] : "marqs" ,
469
+ } ,
470
+ }
471
+ ) ;
472
+ }
473
+
441
474
public async enqueueMessage ( {
442
475
env,
443
476
message,
@@ -1409,17 +1442,18 @@ export class RunQueue {
1409
1442
1410
1443
this . abortController . signal . addEventListener ( "abort" , cleanup ) ;
1411
1444
1412
- const result = await blockingClient . dequeueMessageFromWorkerQueue (
1413
- //keys
1445
+ const result = await blockingClient . blpop (
1414
1446
workerQueueKey ,
1415
- //args
1416
- this . options . redis . keyPrefix ?? "" ,
1417
- String ( this . options . dequeueBlockingTimeoutSeconds ?? 10 )
1447
+ this . options . dequeueBlockingTimeoutSeconds ?? 10
1418
1448
) ;
1419
1449
1420
1450
this . abortController . signal . removeEventListener ( "abort" , cleanup ) ;
1421
1451
1422
- await cleanup ( ) ;
1452
+ cleanup ( ) . then ( ( ) => {
1453
+ this . logger . debug ( "dequeueMessageFromWorkerQueue cleanup" , {
1454
+ service : this . name ,
1455
+ } ) ;
1456
+ } ) ;
1423
1457
1424
1458
if ( ! result ) {
1425
1459
return ;
@@ -1447,24 +1481,16 @@ export class RunQueue {
1447
1481
return ;
1448
1482
}
1449
1483
1450
- const [ messageId , rawMessage ] = result ;
1484
+ const [ , messageKey ] = result ;
1451
1485
1452
- //read message
1453
- const parsedMessage = OutputPayload . safeParse ( JSON . parse ( rawMessage ) ) ;
1454
- if ( ! parsedMessage . success ) {
1455
- this . logger . error ( `[${ this . name } ] Failed to parse message` , {
1456
- messageId,
1457
- error : parsedMessage . error ,
1458
- service : this . name ,
1459
- } ) ;
1486
+ const message = await this . readMessageFromKey ( messageKey ) ;
1460
1487
1488
+ if ( ! message ) {
1461
1489
return ;
1462
1490
}
1463
1491
1464
- const message = parsedMessage . data ;
1465
-
1466
1492
return {
1467
- messageId,
1493
+ messageId : message . runId ,
1468
1494
messageScore : String ( message . timestamp ) ,
1469
1495
message,
1470
1496
} ;
@@ -1622,45 +1648,6 @@ export class RunQueue {
1622
1648
#createBlockingDequeueClient( ) {
1623
1649
const blockingClient = this . redis . duplicate ( ) ;
1624
1650
1625
- blockingClient . defineCommand ( "dequeueMessageFromWorkerQueue" , {
1626
- numberOfKeys : 1 ,
1627
- lua : `
1628
- local workerQueueKey = KEYS[1]
1629
-
1630
- local keyPrefix = ARGV[1]
1631
- local timeoutInSeconds = tonumber(ARGV[2])
1632
-
1633
- -- Attempt to dequeue using BLPOP
1634
- -- result is either nil or [queueName, messageId]
1635
- local result = redis.call('BLPOP', workerQueueKey, timeoutInSeconds)
1636
-
1637
- if not result or type(result) ~= "table" then
1638
- return nil
1639
- end
1640
-
1641
- local messageKeyValue = result[2]
1642
-
1643
- -- Get the message payload
1644
- local messageKey = keyPrefix .. messageKeyValue
1645
-
1646
- local messagePayload = redis.call('GET', messageKey)
1647
-
1648
- -- if the messagePayload is nil, then the message is not in the queue
1649
- if not messagePayload then
1650
- return nil
1651
- end
1652
-
1653
- -- messageKeyValue is {org:<orgId>}:message:<messageId> and we want to extract the messageId
1654
- local messageId = messageKeyValue:match("([^:]+)$")
1655
-
1656
- if not messageId then
1657
- return nil
1658
- end
1659
-
1660
- return {messageId, messagePayload} -- Return message details
1661
- ` ,
1662
- } ) ;
1663
-
1664
1651
return blockingClient ;
1665
1652
}
1666
1653
0 commit comments