queen-mq 0.1.5 → 0.2.0
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 +467 -1775
- package/package.json +12 -14
- package/src/client/client.js +664 -5
- package/src/managers/queueManagerOptimized.js +250 -47
- package/src/routes/ack.js +3 -3
- package/src/server.js +131 -3
- package/src/test/advanced-client-tests.js +761 -0
- package/src/test/advanced-pattern-tests.js +2 -2
- package/src/test/bus-mode-tests.js +6 -6
- package/src/test/core-tests.js +1 -1
- package/src/test/edge-case-tests.js +2 -2
- package/src/test/test-new.js +36 -1
- package/src/webapp-dist/assets/Analytics-DJrE4Rz2.css +1 -0
- package/src/webapp-dist/assets/Analytics-HEMXKmfJ.js +1 -0
- package/src/webapp-dist/assets/ConfirmDialog-YEoCdE7x.js +1 -0
- package/src/webapp-dist/assets/ConsumerGroups-CC5VJywp.css +1 -0
- package/src/webapp-dist/assets/ConsumerGroups-D8Z20HhZ.js +1 -0
- package/src/webapp-dist/assets/Dashboard-BRFOz6it.css +1 -0
- package/src/webapp-dist/assets/Dashboard-Bpx9I32h.js +1 -0
- package/src/webapp-dist/assets/LoadingSpinner-BPttXcbs.js +1 -0
- package/src/webapp-dist/assets/Messages-BOfVHKma.css +1 -0
- package/src/webapp-dist/assets/Messages-EKURCbLl.js +1 -0
- package/src/webapp-dist/assets/QueueDetail-BXXA7xoZ.css +1 -0
- package/src/webapp-dist/assets/QueueDetail-Bmxg0KiA.js +1 -0
- package/src/webapp-dist/assets/Queues-CvrJkrZT.css +1 -0
- package/src/webapp-dist/assets/Queues-yUx9_3-9.js +1 -0
- package/src/webapp-dist/assets/StatusBadge-C1bBtXHh.css +1 -0
- package/src/webapp-dist/assets/StatusBadge-C6N84XmO.js +1 -0
- package/src/webapp-dist/assets/analytics-BapTekLM.js +1 -0
- package/src/webapp-dist/assets/colors-5z6Q_kUr.js +18 -0
- package/src/webapp-dist/assets/index-B7w2bKT6.css +1 -0
- package/src/webapp-dist/assets/index-CUSnwYTH.js +31 -0
- package/src/webapp-dist/assets/messages-CRV6E-xU.js +1 -0
- package/src/webapp-dist/assets/queues-BdUbxfBC.js +1 -0
- package/src/webapp-dist/assets/resources-Bs9U-ceF.js +1 -0
- package/{webapp → src/webapp-dist}/index.html +2 -1
- package/API.md +0 -1226
- package/AUTH.md +0 -2044
- package/CHANGELOG_STATIC_SERVING.md +0 -213
- package/DEPLOYMENT.md +0 -425
- package/PROGRAMMATIC_SERVER.md +0 -239
- package/WEBAPP.md +0 -1889
- package/assets/dashboard-01.png +0 -0
- package/assets/dashboard.png +0 -0
- package/examples/batch-processing.js +0 -58
- package/examples/bus-mode.js +0 -239
- package/examples/continuous-consumer-optimized.js +0 -215
- package/examples/continuous-consumer.js +0 -159
- package/examples/continuous-producer.js +0 -343
- package/examples/mixed-mode.js +0 -277
- package/examples/multi-server-test.js +0 -305
- package/examples/programmatic-server.js +0 -58
- package/examples/server-with-frontend.js +0 -46
- package/examples/single.js +0 -64
- package/examples/smartchat-dealyed.js +0 -42
- package/examples/smartchat.js +0 -52
- package/examples/test-cache-invalidation.js +0 -119
- package/examples/test-cache-multi-server.js +0 -245
- package/examples/test-complete-client.js +0 -260
- package/examples/test-connection-recovery.js +0 -66
- package/examples/test-dashboard-api.js +0 -200
- package/examples/test-minimal-client.js +0 -112
- package/examples/test-queue-creation-policy.js +0 -137
- package/examples/test-traceid.js +0 -147
- package/server.log +0 -1
- package/test-keepalive-v2.sh +0 -22
- package/webapp/COLOR_GUIDE.md +0 -118
- package/webapp/README.md +0 -143
- package/webapp/package-lock.json +0 -3184
- package/webapp/package.json +0 -25
- package/webapp/postcss.config.js +0 -7
- package/webapp/public/assets/queen-logo-blue.svg +0 -210
- package/webapp/public/assets/queen-logo-cyan.svg +0 -210
- package/webapp/public/assets/queen-logo-indigo.svg +0 -210
- package/webapp/public/assets/queen-logo-orange.svg +0 -210
- package/webapp/public/assets/queen-logo-pink.svg +0 -210
- package/webapp/public/assets/queen-logo-purple.svg +0 -210
- package/webapp/public/assets/queen-logo-rose.svg +0 -239
- package/webapp/public/assets/queen-logo.svg +0 -263
- package/webapp/src/App.vue +0 -19
- package/webapp/src/api/analytics.js +0 -10
- package/webapp/src/api/client.js +0 -34
- package/webapp/src/api/consumers.js +0 -52
- package/webapp/src/api/health.js +0 -7
- package/webapp/src/api/messages.js +0 -26
- package/webapp/src/api/queues.js +0 -14
- package/webapp/src/api/resources.js +0 -8
- package/webapp/src/assets/styles/main.css +0 -357
- package/webapp/src/components/analytics/AnalyticsFilters.vue +0 -87
- package/webapp/src/components/analytics/AnalyticsMetrics.vue +0 -57
- package/webapp/src/components/analytics/MessageDistributionChart.vue +0 -111
- package/webapp/src/components/analytics/MessageFlowChart.vue +0 -173
- package/webapp/src/components/analytics/TimeRangeSelector.vue +0 -27
- package/webapp/src/components/analytics/TopQueuesChart.vue +0 -132
- package/webapp/src/components/common/ConfirmDialog.vue +0 -56
- package/webapp/src/components/common/LoadingSpinner.vue +0 -6
- package/webapp/src/components/common/MetricCard.vue +0 -43
- package/webapp/src/components/common/StatusBadge.vue +0 -45
- package/webapp/src/components/dashboard/MessageStatusCard.vue +0 -50
- package/webapp/src/components/dashboard/PerformanceCard.vue +0 -38
- package/webapp/src/components/dashboard/ThroughputChart.vue +0 -182
- package/webapp/src/components/dashboard/TopQueuesTable.vue +0 -53
- package/webapp/src/components/layout/AppLayout.vue +0 -110
- package/webapp/src/components/layout/AppSidebar.vue +0 -304
- package/webapp/src/components/messages/MessageDetailPanel.vue +0 -242
- package/webapp/src/components/messages/MessageFilters.vue +0 -101
- package/webapp/src/components/queue-detail/PartitionList.vue +0 -79
- package/webapp/src/components/queue-detail/PushMessageModal.vue +0 -175
- package/webapp/src/components/queue-detail/QueueConfig.vue +0 -63
- package/webapp/src/components/queue-detail/QueueDetailHeader.vue +0 -53
- package/webapp/src/components/queue-detail/RecentMessages.vue +0 -76
- package/webapp/src/components/queues/CreateQueueModal.vue +0 -193
- package/webapp/src/components/queues/QueueFilters.vue +0 -90
- package/webapp/src/composables/useApi.js +0 -34
- package/webapp/src/composables/useTheme.js +0 -36
- package/webapp/src/main.js +0 -11
- package/webapp/src/router/index.js +0 -42
- package/webapp/src/utils/colors.js +0 -96
- package/webapp/src/utils/formatters.js +0 -49
- package/webapp/src/views/Analytics.vue +0 -377
- package/webapp/src/views/ConsumerGroups.vue +0 -433
- package/webapp/src/views/Dashboard.vue +0 -418
- package/webapp/src/views/Messages.vue +0 -363
- package/webapp/src/views/QueueDetail.vue +0 -582
- package/webapp/src/views/Queues.vue +0 -496
- package/webapp/tailwind.config.js +0 -25
- package/webapp/vite.config.js +0 -10
- /package/{assets → src/webapp-dist/assets}/queen-logo-blue.svg +0 -0
- /package/{assets → src/webapp-dist/assets}/queen-logo-cyan.svg +0 -0
- /package/{assets → src/webapp-dist/assets}/queen-logo-indigo.svg +0 -0
- /package/{assets → src/webapp-dist/assets}/queen-logo-orange.svg +0 -0
- /package/{assets → src/webapp-dist/assets}/queen-logo-pink.svg +0 -0
- /package/{assets → src/webapp-dist/assets}/queen-logo-purple.svg +0 -0
- /package/{assets → src/webapp-dist/assets}/queen-logo-rose.svg +0 -0
- /package/{assets → src/webapp-dist/assets}/queen-logo.svg +0 -0
package/PROGRAMMATIC_SERVER.md
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
# Queen MQ - Programmatic Server API
|
|
2
|
-
|
|
3
|
-
As of version 0.1.2, Queen MQ can be run programmatically from your Node.js code, in addition to running it as a standalone process.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install queen-mq
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Basic Usage
|
|
12
|
-
|
|
13
|
-
### Starting the Server Programmatically
|
|
14
|
-
|
|
15
|
-
```javascript
|
|
16
|
-
import { QueenServer } from 'queen-mq';
|
|
17
|
-
|
|
18
|
-
// Start server with default configuration
|
|
19
|
-
const server = await QueenServer();
|
|
20
|
-
|
|
21
|
-
// Or with custom options
|
|
22
|
-
const server = await QueenServer({
|
|
23
|
-
port: 3000,
|
|
24
|
-
host: '127.0.0.1',
|
|
25
|
-
workerId: 'worker-1'
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
console.log(`Server running at http://${server.host}:${server.port}`);
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Using Client and Server Together
|
|
32
|
-
|
|
33
|
-
```javascript
|
|
34
|
-
import { QueenServer, Queen } from 'queen-mq';
|
|
35
|
-
|
|
36
|
-
// Start the server
|
|
37
|
-
const server = await QueenServer({ port: 3000 });
|
|
38
|
-
|
|
39
|
-
// Create a client
|
|
40
|
-
const client = new Queen({
|
|
41
|
-
servers: [`http://localhost:${server.port}`]
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// Use the queue
|
|
45
|
-
await client.push({
|
|
46
|
-
queue: 'my-queue',
|
|
47
|
-
items: [{ data: { message: 'Hello World' } }]
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const result = await client.pop({ queue: 'my-queue' });
|
|
51
|
-
console.log(result.messages);
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Graceful Shutdown
|
|
55
|
-
|
|
56
|
-
```javascript
|
|
57
|
-
const server = await QueenServer();
|
|
58
|
-
|
|
59
|
-
// Shutdown programmatically
|
|
60
|
-
await server.shutdown('SIGTERM');
|
|
61
|
-
|
|
62
|
-
// Or handle process signals
|
|
63
|
-
process.on('SIGINT', async () => {
|
|
64
|
-
await server.shutdown('SIGINT');
|
|
65
|
-
});
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Server Options
|
|
69
|
-
|
|
70
|
-
The `QueenServer()` function accepts an options object:
|
|
71
|
-
|
|
72
|
-
```javascript
|
|
73
|
-
{
|
|
74
|
-
port: number, // Server port (default: from config, typically 3000)
|
|
75
|
-
host: string, // Server host (default: from config, typically '127.0.0.1')
|
|
76
|
-
workerId: string, // Worker ID for clustering (default: from config)
|
|
77
|
-
serveWebapp: boolean, // Serve built frontend from same server (default: false)
|
|
78
|
-
webappPath: string, // Path to webapp dist folder (default: '../webapp/dist')
|
|
79
|
-
skipDatabaseMigration: boolean // Skip database migration on startup (default: false)
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Return Value
|
|
84
|
-
|
|
85
|
-
The `QueenServer()` function returns a promise that resolves to a server instance with:
|
|
86
|
-
|
|
87
|
-
```javascript
|
|
88
|
-
{
|
|
89
|
-
port: number, // The port the server is listening on
|
|
90
|
-
host: string, // The host the server is bound to
|
|
91
|
-
shutdown: Function, // Async function to gracefully shutdown the server
|
|
92
|
-
app: Object // The underlying uWebSockets.js app instance
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## Use Cases
|
|
97
|
-
|
|
98
|
-
### 1. Embedded Message Queue
|
|
99
|
-
|
|
100
|
-
Run Queen MQ embedded in your application instead of as a separate service:
|
|
101
|
-
|
|
102
|
-
```javascript
|
|
103
|
-
import { QueenServer, Queen } from 'queen-mq';
|
|
104
|
-
import express from 'express';
|
|
105
|
-
|
|
106
|
-
// Start Queen server
|
|
107
|
-
await QueenServer({ port: 3001 });
|
|
108
|
-
|
|
109
|
-
// Start your application server
|
|
110
|
-
const app = express();
|
|
111
|
-
const client = new Queen({ servers: ['http://localhost:3001'] });
|
|
112
|
-
|
|
113
|
-
app.post('/api/task', async (req, res) => {
|
|
114
|
-
await client.push({
|
|
115
|
-
queue: 'tasks',
|
|
116
|
-
items: [{ data: req.body }]
|
|
117
|
-
});
|
|
118
|
-
res.json({ status: 'queued' });
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
app.listen(3000);
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### 2. Testing
|
|
125
|
-
|
|
126
|
-
Easily spin up and tear down Queen servers in tests:
|
|
127
|
-
|
|
128
|
-
```javascript
|
|
129
|
-
import { QueenServer, Queen } from 'queen-mq';
|
|
130
|
-
import { describe, it, beforeAll, afterAll } from 'jest';
|
|
131
|
-
|
|
132
|
-
describe('Queue Tests', () => {
|
|
133
|
-
let server, client;
|
|
134
|
-
|
|
135
|
-
beforeAll(async () => {
|
|
136
|
-
server = await QueenServer({ port: 4000 });
|
|
137
|
-
client = new Queen({ servers: ['http://localhost:4000'] });
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
afterAll(async () => {
|
|
141
|
-
await server.shutdown('TEST');
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('should process messages', async () => {
|
|
145
|
-
await client.push({
|
|
146
|
-
queue: 'test-queue',
|
|
147
|
-
items: [{ data: { test: true } }]
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
const result = await client.pop({ queue: 'test-queue' });
|
|
151
|
-
expect(result.messages).toHaveLength(1);
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### 3. Multiple Servers
|
|
157
|
-
|
|
158
|
-
Run multiple Queen instances in the same process:
|
|
159
|
-
|
|
160
|
-
```javascript
|
|
161
|
-
import { QueenServer } from 'queen-mq';
|
|
162
|
-
|
|
163
|
-
// Start multiple servers for different purposes
|
|
164
|
-
const server1 = await QueenServer({ port: 3001, workerId: 'worker-1' });
|
|
165
|
-
const server2 = await QueenServer({ port: 3002, workerId: 'worker-2' });
|
|
166
|
-
|
|
167
|
-
console.log('Multi-server setup running');
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### 4. Serve Built Frontend (Single Deployment)
|
|
171
|
-
|
|
172
|
-
Serve the Queen dashboard UI from the same server as the API:
|
|
173
|
-
|
|
174
|
-
```javascript
|
|
175
|
-
import { QueenServer } from 'queen-mq';
|
|
176
|
-
|
|
177
|
-
// Build the frontend first: cd webapp && npm run build
|
|
178
|
-
|
|
179
|
-
const server = await QueenServer({
|
|
180
|
-
port: 3000,
|
|
181
|
-
serveWebapp: true // Enable static file serving
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
console.log(`Dashboard: http://localhost:${server.port}/`);
|
|
185
|
-
console.log(`API: http://localhost:${server.port}/api/v1/`);
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
**Benefits:**
|
|
189
|
-
- ✅ Single port deployment (no CORS issues)
|
|
190
|
-
- ✅ No separate web server needed (nginx, apache, etc.)
|
|
191
|
-
- ✅ Simpler deployment and configuration
|
|
192
|
-
- ✅ Production-ready with proper caching headers
|
|
193
|
-
- ✅ SPA routing fully supported
|
|
194
|
-
|
|
195
|
-
**How it works:**
|
|
196
|
-
- Serves built files from `webapp/dist/`
|
|
197
|
-
- Assets get long-term caching (fingerprinted files)
|
|
198
|
-
- `index.html` always fresh (no caching)
|
|
199
|
-
- SPA fallback for client-side routing
|
|
200
|
-
- API routes always take precedence
|
|
201
|
-
|
|
202
|
-
**Build the frontend:**
|
|
203
|
-
```bash
|
|
204
|
-
cd webapp
|
|
205
|
-
npm install
|
|
206
|
-
npm run build
|
|
207
|
-
cd ..
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Start with frontend:**
|
|
211
|
-
```bash
|
|
212
|
-
node examples/server-with-frontend.js
|
|
213
|
-
# Or programmatically with serveWebapp: true
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
## Traditional Usage
|
|
217
|
-
|
|
218
|
-
You can still run Queen as a standalone server:
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
npm start
|
|
222
|
-
# or
|
|
223
|
-
node src/server.js
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
When `src/server.js` is run directly (not imported), it automatically starts the server with configuration from `src/config.js`.
|
|
227
|
-
|
|
228
|
-
## Requirements
|
|
229
|
-
|
|
230
|
-
- Node.js ≥ 22.0.0
|
|
231
|
-
- PostgreSQL database (configured via environment variables or config.js)
|
|
232
|
-
- Database must be initialized first (run `npm run init`)
|
|
233
|
-
|
|
234
|
-
## See Also
|
|
235
|
-
|
|
236
|
-
- [Main README](./README.md) - General Queen MQ documentation
|
|
237
|
-
- [API Documentation](./API.md) - HTTP API reference
|
|
238
|
-
- [Examples](./examples/) - More usage examples
|
|
239
|
-
|