queen-mq 0.3.1 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +309 -167
- package/client-js/client-v2/Queen.js +66 -0
- package/client-js/client-v2/README.md +67 -10
- package/client-js/client-v2/builders/QueueBuilder.js +7 -1
- package/client-js/client-v2/builders/TransactionBuilder.js +20 -4
- package/client-js/client-v2/stream/StreamBuilder.js +72 -0
- package/client-js/client-v2/stream/StreamConsumer.js +156 -0
- package/client-js/client-v2/stream/Window.js +140 -0
- package/client-js/test-v2/GETTING_STARTED.md +27 -0
- package/client-js/test-v2/MAINTENANCE_TEST.md +148 -0
- package/client-js/test-v2/README_SUBSCRIPTION_TESTS.md +201 -0
- package/client-js/test-v2/consume.js +11 -0
- package/client-js/test-v2/dlq.js +1 -1
- package/client-js/test-v2/load.js +2 -0
- package/client-js/test-v2/maintenance.js +261 -0
- package/client-js/test-v2/retention.js +69 -0
- package/client-js/test-v2/run.js +7 -1
- package/client-js/test-v2/subscription.js +198 -18
- package/client-js/test-v2/transaction.js +66 -4
- package/package.json +2 -2
- package/client-js/client/client.js +0 -1536
- package/client-js/client/index.js +0 -4
- package/client-js/client/utils/http.js +0 -173
- package/client-js/client/utils/loadBalancer.js +0 -152
- package/client-js/client/utils/retry.js +0 -41
- package/client-js/services/encryptionService.js +0 -82
- package/client-js/services/evictionService.js +0 -160
- package/client-js/services/retentionService.js +0 -162
- package/client-js/services/startupSync.js +0 -35
- package/client-js/test/README.md +0 -224
- package/client-js/test/advanced-client-tests.js +0 -761
- package/client-js/test/advanced-pattern-tests.js +0 -1137
- package/client-js/test/bus-mode-tests.js +0 -361
- package/client-js/test/core-tests.js +0 -457
- package/client-js/test/edge-case-tests.js +0 -562
- package/client-js/test/enterprise-tests.js +0 -637
- package/client-js/test/human.js +0 -162
- package/client-js/test/partition-locking-tests.js +0 -545
- package/client-js/test/partition-transaction-tests.js +0 -482
- package/client-js/test/qos0-tests.js +0 -334
- package/client-js/test/test-new.js +0 -370
- package/client-js/test/utils.js +0 -169
- package/client-js/test/window-buffer-test.js +0 -114
- package/client-js/utils/logger.js +0 -44
- package/client-js/utils/uuid.js +0 -5
|
@@ -70,8 +70,8 @@ export async function transactionMultiplePushes(client) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export async function transactionMultipleAcks(client) {
|
|
73
|
-
const queueA = await client.queue('test-queue-v2-txn-multi-ack-a').create()
|
|
74
|
-
const queueB = await client.queue('test-queue-v2-txn-multi-ack-b').create()
|
|
73
|
+
const queueA = await client.queue('test-queue-v2-txn-multi-ack-a').config().create()
|
|
74
|
+
const queueB = await client.queue('test-queue-v2-txn-multi-ack-b').config().create()
|
|
75
75
|
if (!queueA.configured || !queueB.configured) {
|
|
76
76
|
return { success: false, message: 'Queues not created' }
|
|
77
77
|
}
|
|
@@ -111,8 +111,12 @@ export async function transactionMultipleAcks(client) {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
export async function transactionAckWithStatus(client) {
|
|
114
|
-
const queueA = await client.queue('test-queue-v2-txn-ack-status-a').
|
|
115
|
-
|
|
114
|
+
const queueA = await client.queue('test-queue-v2-txn-ack-status-a').config({
|
|
115
|
+
retryLimit: 0
|
|
116
|
+
}).create()
|
|
117
|
+
const queueB = await client.queue('test-queue-v2-txn-ack-status-b').config({
|
|
118
|
+
retryLimit: 0
|
|
119
|
+
}).create()
|
|
116
120
|
if (!queueA.configured || !queueB.configured) {
|
|
117
121
|
return { success: false, message: 'Queues not created' }
|
|
118
122
|
}
|
|
@@ -441,3 +445,61 @@ export async function transactionMultipleQueues(client) {
|
|
|
441
445
|
}
|
|
442
446
|
}
|
|
443
447
|
|
|
448
|
+
export async function transactionRollback(client) {
|
|
449
|
+
const queueA = await client.queue('test-queue-v2-txn-rollback-a')
|
|
450
|
+
.config({
|
|
451
|
+
leaseTime: 1
|
|
452
|
+
}).create()
|
|
453
|
+
const queueB = await client.queue('test-queue-v2-txn-rollback-b').config({
|
|
454
|
+
leaseTime: 1
|
|
455
|
+
}).create()
|
|
456
|
+
if (!queueA.configured || !queueB.configured) {
|
|
457
|
+
return { success: false, message: 'Queues not created' }
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// Push a test message to queue A
|
|
461
|
+
await client.queue('test-queue-v2-txn-rollback-a').push([{ data: { test: 'rollback' } }])
|
|
462
|
+
|
|
463
|
+
// Pop the message
|
|
464
|
+
const messages = await client.queue('test-queue-v2-txn-rollback-a').batch(1).wait(false).pop()
|
|
465
|
+
if (messages.length === 0) {
|
|
466
|
+
return { success: false, message: 'No message to pop' }
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Attempt a transaction that should fail and rollback
|
|
470
|
+
let transactionFailed = false
|
|
471
|
+
try {
|
|
472
|
+
await client
|
|
473
|
+
.transaction()
|
|
474
|
+
.queue('test-queue-v2-txn-rollback-b')
|
|
475
|
+
.push([{ data: { value: 1 } }]) // This PUSH should succeed...
|
|
476
|
+
.ack(messages[0]) // This ACK should succeed...
|
|
477
|
+
.ack({ transactionId: 'non-existent-id', partitionId: messages[0].partitionId }) // But this should FAIL
|
|
478
|
+
.commit()
|
|
479
|
+
} catch (error) {
|
|
480
|
+
transactionFailed = true
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// Verify transaction failed
|
|
484
|
+
if (!transactionFailed) {
|
|
485
|
+
return { success: false, message: 'Transaction should have failed but did not' }
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
await new Promise(resolve => setTimeout(resolve, 2000))
|
|
489
|
+
|
|
490
|
+
// Verify rollback: queue B should be EMPTY (PUSH was rolled back)
|
|
491
|
+
const resultB = await client.queue('test-queue-v2-txn-rollback-b').batch(10).wait(false).pop()
|
|
492
|
+
|
|
493
|
+
// Verify rollback: queue A should still have the message (ACK was rolled back)
|
|
494
|
+
const resultA = await client.queue('test-queue-v2-txn-rollback-a').batch(10).wait(false).pop()
|
|
495
|
+
|
|
496
|
+
const rollbackWorked = resultB.length === 0 && resultA.length === 1
|
|
497
|
+
|
|
498
|
+
return {
|
|
499
|
+
success: rollbackWorked,
|
|
500
|
+
message: rollbackWorked
|
|
501
|
+
? 'Transaction rollback verified: PUSH and ACK were both rolled back'
|
|
502
|
+
: `Rollback failed: Queue A has ${resultA.length} messages (expected 1), Queue B has ${resultB.length} messages (expected 0)`
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "queen-mq",
|
|
3
|
-
"version": "0.3
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "High-performance C++ message queue backed by PostgreSQL",
|
|
6
6
|
"main": "client-js/client-v2/index.js",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"start": "./server/bin/queen-server",
|
|
9
9
|
"build:webapp": "cd webapp && npm install && npm run build",
|
|
10
10
|
"publish:public": "npm publish --access public",
|
|
11
|
-
"test": "node client-js/test/
|
|
11
|
+
"test": "node client-js/test-v2/run.js human"
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
14
|
"client-js/",
|