@webda/amqp 3.1.7 → 3.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 +25 -0
- package/lib/pubsub.d.ts +10 -0
- package/lib/pubsub.js +25 -3
- package/lib/pubsub.js.map +1 -1
- package/package.json +4 -4
- package/webda.module.json +4 -0
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# @webda/amqp
|
|
2
|
+
|
|
3
|
+
Pub/Sub and Queue implementation using amqp protocol.
|
|
4
|
+
You can use it with RabbitMQ or any other AMQP compatible server.
|
|
5
|
+
|
|
6
|
+
## Usage
|
|
7
|
+
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"services": {
|
|
11
|
+
"queue": {
|
|
12
|
+
"type": "AMQPQueue",
|
|
13
|
+
"endpoint": "amqp://localhost:5672",
|
|
14
|
+
"queue": "webda-test",
|
|
15
|
+
"maxConsumers": 1
|
|
16
|
+
},
|
|
17
|
+
"pubsub": {
|
|
18
|
+
"type": "AMQPPubSub",
|
|
19
|
+
"endpoint": "amqp://localhost:5672",
|
|
20
|
+
"channel": "webda-test-pub",
|
|
21
|
+
"maxConsumers": 1
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
package/lib/pubsub.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ import * as amqplib from "amqplib";
|
|
|
3
3
|
export declare class AMQPPubSubParameters extends ServiceParameters {
|
|
4
4
|
url: string;
|
|
5
5
|
channel: string;
|
|
6
|
+
/**
|
|
7
|
+
* @default ""
|
|
8
|
+
* @SchemaOptional
|
|
9
|
+
*/
|
|
10
|
+
subscription: string;
|
|
6
11
|
exchange?: {
|
|
7
12
|
/**
|
|
8
13
|
* @default fanout
|
|
@@ -58,6 +63,11 @@ export default class AMQPPubSubService<T = any, K extends AMQPPubSubParameters =
|
|
|
58
63
|
* @override
|
|
59
64
|
*/
|
|
60
65
|
init(): Promise<this>;
|
|
66
|
+
/**
|
|
67
|
+
* Return queue size
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
size(): Promise<number>;
|
|
61
71
|
/**
|
|
62
72
|
* Work a queue calling the callback with every Event received
|
|
63
73
|
* If the callback is called without exception the `deleteMessage` is called
|
package/lib/pubsub.js
CHANGED
|
@@ -6,6 +6,7 @@ export class AMQPPubSubParameters extends ServiceParameters {
|
|
|
6
6
|
super(params);
|
|
7
7
|
this.exchange ?? (this.exchange = {});
|
|
8
8
|
(_a = this.exchange).type ?? (_a.type = "fanout");
|
|
9
|
+
this.subscription ?? (this.subscription = "");
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
@@ -24,6 +25,7 @@ export default class AMQPPubSubService extends PubSubService {
|
|
|
24
25
|
* @override
|
|
25
26
|
*/
|
|
26
27
|
async sendMessage(event, routingKey = "") {
|
|
28
|
+
this.metrics.messages_sent.inc();
|
|
27
29
|
await this.channel.publish(this.parameters.channel, routingKey, Buffer.from(JSONUtils.stringify(event)));
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
@@ -38,6 +40,13 @@ export default class AMQPPubSubService extends PubSubService {
|
|
|
38
40
|
this.exchange = await this.channel.assertExchange(this.parameters.channel, this.parameters.exchange?.type || "fanout", params);
|
|
39
41
|
return this;
|
|
40
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Return queue size
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
async size() {
|
|
48
|
+
return (await this.channel.assertQueue(this.parameters.subscription)).messageCount;
|
|
49
|
+
}
|
|
41
50
|
/**
|
|
42
51
|
* Work a queue calling the callback with every Event received
|
|
43
52
|
* If the callback is called without exception the `deleteMessage` is called
|
|
@@ -47,17 +56,30 @@ export default class AMQPPubSubService extends PubSubService {
|
|
|
47
56
|
consume(callback, eventPrototype, onBind) {
|
|
48
57
|
let consumerTag;
|
|
49
58
|
return new CancelablePromise(async (_resolve, reject) => {
|
|
50
|
-
let queue = await this.channel.assertQueue(
|
|
59
|
+
let queue = await this.channel.assertQueue(this.parameters.subscription, {
|
|
51
60
|
exclusive: true,
|
|
52
61
|
durable: false,
|
|
53
62
|
autoDelete: true
|
|
54
63
|
});
|
|
55
64
|
await this.channel.bindQueue(queue.queue, this.parameters.channel, "*");
|
|
56
|
-
consumerTag = (await this.channel.consume(queue.queue, msg => {
|
|
65
|
+
consumerTag = (await this.channel.consume(queue.queue, async (msg) => {
|
|
57
66
|
if (msg === null) {
|
|
58
67
|
reject("Cancelled by server");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.metrics.messages_received.inc();
|
|
71
|
+
const end = this.metrics.processing_duration.startTimer();
|
|
72
|
+
try {
|
|
73
|
+
await callback(this.unserialize(msg?.content.toString() || "", eventPrototype));
|
|
74
|
+
await this.channel.ack(msg);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
this.metrics.errors.inc();
|
|
78
|
+
this.getWebda().log("ERROR", `Message ${msg?.properties?.messageId}`, err);
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
end();
|
|
59
82
|
}
|
|
60
|
-
callback(this.unserialize(msg?.content.toString() || "", eventPrototype));
|
|
61
83
|
})).consumerTag;
|
|
62
84
|
if (onBind) {
|
|
63
85
|
onBind();
|
package/lib/pubsub.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../src/pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,MAAM,OAAO,oBAAqB,SAAQ,iBAAiB;
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../src/pubsub.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webda/amqp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "Implements AMQP on webda",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"activemq",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"test": "c8 mocha --recursive --exit --timeout=100000 src/**/*.spec.ts src/*.spec.ts"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@webda/core": "^3.
|
|
22
|
+
"@webda/core": "^3.12.0",
|
|
23
23
|
"amqplib": "^0.10.0"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@testdeck/mocha": "^0.3.3",
|
|
51
51
|
"@types/amqplib": "^0.10.0",
|
|
52
52
|
"@types/node": "18.11.13",
|
|
53
|
-
"@webda/shell": "^3.
|
|
53
|
+
"@webda/shell": "^3.9.0",
|
|
54
54
|
"sinon": "^17.0.0"
|
|
55
55
|
},
|
|
56
56
|
"nx": {
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=18.0.0"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "167f6b86b33867ef2ab10cc02624bc0441965632"
|
|
67
67
|
}
|