queen-mq 0.1.6 → 0.2.11
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 +166 -2078
- package/{src → client-js}/benchmark/consumer.js +5 -3
- package/{src → client-js}/benchmark/producer.js +9 -4
- package/client-js/client/client.js +1511 -0
- package/{src → client-js}/client/index.js +1 -4
- package/{src → client-js}/client/utils/http.js +3 -2
- package/{src → client-js}/client/utils/retry.js +7 -1
- package/client-js/test/advanced-client-tests.js +761 -0
- package/{src → client-js}/test/advanced-pattern-tests.js +2 -2
- package/{src → client-js}/test/bus-mode-tests.js +6 -6
- package/{src → client-js}/test/core-tests.js +8 -3
- package/{src → client-js}/test/edge-case-tests.js +4 -3
- package/client-js/test/human.js +162 -0
- package/client-js/test/qos0-tests.js +334 -0
- package/{src → client-js}/test/test-new.js +78 -1
- package/package.json +8 -29
- package/init-db.js +0 -20
- package/src/client/client.js +0 -586
- package/src/cluster-server.js +0 -242
- package/src/config.js +0 -229
- package/src/database/connection.js +0 -129
- package/src/database/poolManager.js +0 -199
- package/src/database/schema-v2.sql +0 -278
- package/src/managers/eventManager.js +0 -59
- package/src/managers/queueManagerOptimized.js +0 -1431
- package/src/managers/resourceCache.js +0 -96
- package/src/managers/systemEventManager.js +0 -132
- package/src/routes/ack.js +0 -26
- package/src/routes/configure.js +0 -46
- package/src/routes/messages.js +0 -368
- package/src/routes/pop.js +0 -69
- package/src/routes/push.js +0 -28
- package/src/routes/resources.js +0 -330
- package/src/routes/status.js +0 -1037
- package/src/server.js +0 -1528
- package/src/test/MIGRATION_ISSUES.md +0 -174
- package/src/test/test.js +0 -4524
- package/src/utils/streaming.js +0 -231
- package/src/webapp-dist/assets/Analytics-DJrE4Rz2.css +0 -1
- package/src/webapp-dist/assets/Analytics-HEMXKmfJ.js +0 -1
- package/src/webapp-dist/assets/ConfirmDialog-YEoCdE7x.js +0 -1
- package/src/webapp-dist/assets/ConsumerGroups-CC5VJywp.css +0 -1
- package/src/webapp-dist/assets/ConsumerGroups-D8Z20HhZ.js +0 -1
- package/src/webapp-dist/assets/Dashboard-BRFOz6it.css +0 -1
- package/src/webapp-dist/assets/Dashboard-Bpx9I32h.js +0 -1
- package/src/webapp-dist/assets/LoadingSpinner-BPttXcbs.js +0 -1
- package/src/webapp-dist/assets/Messages-BOfVHKma.css +0 -1
- package/src/webapp-dist/assets/Messages-EKURCbLl.js +0 -1
- package/src/webapp-dist/assets/QueueDetail-BXXA7xoZ.css +0 -1
- package/src/webapp-dist/assets/QueueDetail-Bmxg0KiA.js +0 -1
- package/src/webapp-dist/assets/Queues-CvrJkrZT.css +0 -1
- package/src/webapp-dist/assets/Queues-yUx9_3-9.js +0 -1
- package/src/webapp-dist/assets/StatusBadge-C1bBtXHh.css +0 -1
- package/src/webapp-dist/assets/StatusBadge-C6N84XmO.js +0 -1
- package/src/webapp-dist/assets/analytics-BapTekLM.js +0 -1
- package/src/webapp-dist/assets/colors-5z6Q_kUr.js +0 -18
- package/src/webapp-dist/assets/index-B7w2bKT6.css +0 -1
- package/src/webapp-dist/assets/index-CUSnwYTH.js +0 -31
- package/src/webapp-dist/assets/messages-CRV6E-xU.js +0 -1
- package/src/webapp-dist/assets/queen-logo-blue.svg +0 -210
- package/src/webapp-dist/assets/queen-logo-cyan.svg +0 -210
- package/src/webapp-dist/assets/queen-logo-indigo.svg +0 -210
- package/src/webapp-dist/assets/queen-logo-orange.svg +0 -210
- package/src/webapp-dist/assets/queen-logo-pink.svg +0 -210
- package/src/webapp-dist/assets/queen-logo-purple.svg +0 -210
- package/src/webapp-dist/assets/queen-logo-rose.svg +0 -239
- package/src/webapp-dist/assets/queen-logo.svg +0 -263
- package/src/webapp-dist/assets/queues-BdUbxfBC.js +0 -1
- package/src/webapp-dist/assets/resources-Bs9U-ceF.js +0 -1
- package/src/webapp-dist/index.html +0 -15
- package/src/websocket/wsServer.js +0 -228
- /package/{src → client-js}/benchmark/consumer_multi.js +0 -0
- /package/{src → client-js}/benchmark/producer_multi.js +0 -0
- /package/{src → client-js}/client/utils/loadBalancer.js +0 -0
- /package/{src → client-js}/services/encryptionService.js +0 -0
- /package/{src → client-js}/services/evictionService.js +0 -0
- /package/{src → client-js}/services/retentionService.js +0 -0
- /package/{src → client-js}/services/startupSync.js +0 -0
- /package/{src → client-js}/test/README.md +0 -0
- /package/{src → client-js}/test/enterprise-tests.js +0 -0
- /package/{src → client-js}/test/partition-locking-tests.js +0 -0
- /package/{src → client-js}/test/utils.js +0 -0
- /package/{src → client-js}/test/window-buffer-test.js +0 -0
- /package/{src → client-js}/utils/logger.js +0 -0
- /package/{src → client-js}/utils/uuid.js +0 -0
|
@@ -24,6 +24,12 @@ import {
|
|
|
24
24
|
resetResults
|
|
25
25
|
} from './utils.js';
|
|
26
26
|
|
|
27
|
+
// Import human tests
|
|
28
|
+
import {
|
|
29
|
+
testCreateQueue,
|
|
30
|
+
workerQueueTest
|
|
31
|
+
} from './human.js';
|
|
32
|
+
|
|
27
33
|
// Import test modules
|
|
28
34
|
import {
|
|
29
35
|
testQueueCreationPolicy,
|
|
@@ -90,6 +96,30 @@ import {
|
|
|
90
96
|
testMessageDeduplication
|
|
91
97
|
} from './advanced-pattern-tests.js';
|
|
92
98
|
|
|
99
|
+
import {
|
|
100
|
+
testPipelineBasic,
|
|
101
|
+
testPipelineErrorHandling,
|
|
102
|
+
testPipelineAutoRenewal,
|
|
103
|
+
testPipelineParallel,
|
|
104
|
+
testPipelineConcurrencyRaceCondition,
|
|
105
|
+
testPipelineContinuous,
|
|
106
|
+
testTransactionAPI,
|
|
107
|
+
testPipelineAtomic,
|
|
108
|
+
testManualLeaseRenewal,
|
|
109
|
+
testLeaseValidation,
|
|
110
|
+
testComplexPipelineWorkflow,
|
|
111
|
+
runAdvancedClientTests
|
|
112
|
+
} from './advanced-client-tests.js';
|
|
113
|
+
|
|
114
|
+
import {
|
|
115
|
+
testQoS0Buffering,
|
|
116
|
+
testAutoAck,
|
|
117
|
+
testConsumerGroupAutoAck,
|
|
118
|
+
testFIFOOrdering,
|
|
119
|
+
testMixedOperations,
|
|
120
|
+
testBatchedPayload
|
|
121
|
+
} from './qos0-tests.js';
|
|
122
|
+
|
|
93
123
|
// Helper to run a test with error handling and delay
|
|
94
124
|
async function runTest(testFn) {
|
|
95
125
|
try {
|
|
@@ -113,12 +143,14 @@ if (testFilter === 'help' || testFilter === '--help' || testFilter === '-h') {
|
|
|
113
143
|
console.log(' enterprise - Enterprise features (encryption, retention, eviction)');
|
|
114
144
|
console.log(' bus - Bus mode features (consumer groups, mixed mode)');
|
|
115
145
|
console.log(' edge - Edge cases (null payloads, large payloads, SQL injection, etc.)');
|
|
146
|
+
console.log(' qos0 - QoS 0 features (buffering, auto-ack, FIFO ordering)');
|
|
116
147
|
console.log(' advanced - Advanced patterns (pipeline, fan-out, DLQ, circuit breaker)');
|
|
117
148
|
console.log('\nExamples:');
|
|
118
149
|
console.log(' node src/test/test-new.js # Run all tests');
|
|
119
150
|
console.log(' node src/test/test-new.js core # Run only core tests');
|
|
120
151
|
console.log(' node src/test/test-new.js bus # Run only bus mode tests');
|
|
121
152
|
console.log(' node src/test/test-new.js edge # Run only edge case tests');
|
|
153
|
+
console.log(' node src/test/test-new.js qos0 # Run only QoS 0 tests');
|
|
122
154
|
process.exit(0);
|
|
123
155
|
}
|
|
124
156
|
|
|
@@ -154,6 +186,16 @@ async function runTests() {
|
|
|
154
186
|
|
|
155
187
|
// Clean up any existing test data
|
|
156
188
|
await cleanupTestData();
|
|
189
|
+
|
|
190
|
+
// ============================================
|
|
191
|
+
// HUMAN TESTS
|
|
192
|
+
// ============================================
|
|
193
|
+
if (!testFilter || testFilter === 'human') {
|
|
194
|
+
console.log('\n👤 HUMAN TESTS');
|
|
195
|
+
console.log('-'.repeat(40));
|
|
196
|
+
await runTest(() => testCreateQueue(client));
|
|
197
|
+
await runTest(() => workerQueueTest(client));
|
|
198
|
+
}
|
|
157
199
|
|
|
158
200
|
// ============================================
|
|
159
201
|
// CORE FEATURE TESTS
|
|
@@ -234,11 +276,46 @@ async function runTests() {
|
|
|
234
276
|
await runTest(() => testXSSPrevention(client));
|
|
235
277
|
}
|
|
236
278
|
|
|
279
|
+
// ============================================
|
|
280
|
+
// QOS 0 FEATURE TESTS
|
|
281
|
+
// ============================================
|
|
282
|
+
if (!testFilter || testFilter === 'qos0') {
|
|
283
|
+
console.log('\n⚡ QOS 0 FEATURES');
|
|
284
|
+
console.log('-'.repeat(40));
|
|
285
|
+
|
|
286
|
+
await runTest(() => testQoS0Buffering(client));
|
|
287
|
+
await runTest(() => testAutoAck(client));
|
|
288
|
+
await runTest(() => testConsumerGroupAutoAck(client));
|
|
289
|
+
await runTest(() => testFIFOOrdering(client));
|
|
290
|
+
await runTest(() => testMixedOperations(client));
|
|
291
|
+
await runTest(() => testBatchedPayload(client));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// ============================================
|
|
295
|
+
// ADVANCED CLIENT FEATURE TESTS
|
|
296
|
+
// ============================================
|
|
297
|
+
if (!testFilter || testFilter === 'advanced' || testFilter === 'client') {
|
|
298
|
+
console.log('\n🚀 ADVANCED CLIENT FEATURES');
|
|
299
|
+
console.log('-'.repeat(40));
|
|
300
|
+
|
|
301
|
+
await runTest(() => testPipelineBasic(client));
|
|
302
|
+
await runTest(() => testPipelineErrorHandling(client));
|
|
303
|
+
await runTest(() => testPipelineAutoRenewal(client));
|
|
304
|
+
await runTest(() => testPipelineParallel(client));
|
|
305
|
+
await runTest(() => testPipelineConcurrencyRaceCondition(client));
|
|
306
|
+
await runTest(() => testPipelineContinuous(client));
|
|
307
|
+
await runTest(() => testTransactionAPI(client));
|
|
308
|
+
await runTest(() => testPipelineAtomic(client));
|
|
309
|
+
await runTest(() => testManualLeaseRenewal(client));
|
|
310
|
+
await runTest(() => testLeaseValidation(client));
|
|
311
|
+
await runTest(() => testComplexPipelineWorkflow(client));
|
|
312
|
+
}
|
|
313
|
+
|
|
237
314
|
// ============================================
|
|
238
315
|
// ADVANCED SCENARIO TESTS
|
|
239
316
|
// ============================================
|
|
240
317
|
if (!testFilter || testFilter === 'advanced' || testFilter === 'pattern') {
|
|
241
|
-
console.log('\n🎯 ADVANCED
|
|
318
|
+
console.log('\n🎯 ADVANCED PATTERNS');
|
|
242
319
|
console.log('-'.repeat(40));
|
|
243
320
|
|
|
244
321
|
await runTest(() => testMultiStagePipeline(client));
|
package/package.json
CHANGED
|
@@ -1,44 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "queen-mq",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.11",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "High-performance message queue backed by PostgreSQL",
|
|
6
|
-
"main": "
|
|
5
|
+
"description": "High-performance C++ message queue backed by PostgreSQL",
|
|
6
|
+
"main": "client-js/client/index.js",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"start": "
|
|
9
|
-
"start:cluster": "node src/cluster-server.js",
|
|
8
|
+
"start": "./server/bin/queen-server",
|
|
10
9
|
"build:webapp": "cd webapp && npm install && npm run build",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"publish:public": "npm run build:webapp && npm run copy:webapp && npm publish --access public",
|
|
14
|
-
"test:produce": "node test.js produce",
|
|
15
|
-
"test:consume": "node test.js consume",
|
|
16
|
-
"test": "node src/test/test.js",
|
|
17
|
-
"test:core": "node src/test/core-features-test.js",
|
|
18
|
-
"test:comprehensive": "node src/test/comprehensive-test.js",
|
|
19
|
-
"test:edge": "node src/test/comprehensive-edge-cases-test.js",
|
|
20
|
-
"test:advanced": "node src/test/advanced-scenarios-test.js",
|
|
21
|
-
"test:all": "npm run test && npm run test:edge && npm run test:advanced",
|
|
22
|
-
"test:quick": "npm run test:core",
|
|
23
|
-
"test:lease": "node src/test/test-lease-expiration.js",
|
|
24
|
-
"test:lease:simple": "node test-lease-simple.js",
|
|
25
|
-
"test:client": "node test-client.js",
|
|
26
|
-
"test:simple": "node test-simple.js",
|
|
27
|
-
"init": "node init-db.js"
|
|
10
|
+
"publish:public": "npm publish --access public",
|
|
11
|
+
"test": "node client-js/test/test-new.js"
|
|
28
12
|
},
|
|
29
13
|
"files": [
|
|
30
|
-
"
|
|
31
|
-
"init-db.js",
|
|
14
|
+
"client-js/",
|
|
32
15
|
"LICENSE.md",
|
|
33
16
|
"README.md"
|
|
34
17
|
],
|
|
35
18
|
"dependencies": {
|
|
36
19
|
"axios": "^1.12.2",
|
|
37
|
-
"
|
|
38
|
-
"pg": "^8.13.3",
|
|
39
|
-
"uuid": "^13.0.0",
|
|
40
|
-
"uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.52.0",
|
|
41
|
-
"ws": "^8.18.3"
|
|
20
|
+
"uuid": "^13.0.0"
|
|
42
21
|
},
|
|
43
22
|
"engines": {
|
|
44
23
|
"node": ">=22.0.0"
|
package/init-db.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createPool, initDatabase } from './src/database/connection.js';
|
|
3
|
-
|
|
4
|
-
const init = async () => {
|
|
5
|
-
console.log('Initializing Queen database schema...');
|
|
6
|
-
|
|
7
|
-
const pool = createPool();
|
|
8
|
-
|
|
9
|
-
try {
|
|
10
|
-
await initDatabase(pool);
|
|
11
|
-
console.log('✅ Database schema initialized successfully');
|
|
12
|
-
} catch (error) {
|
|
13
|
-
console.error('❌ Failed to initialize database:', error.message);
|
|
14
|
-
process.exit(1);
|
|
15
|
-
} finally {
|
|
16
|
-
await pool.end();
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
init();
|