@webda/amqp 3.1.8 → 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 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":"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"}
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.1.8",
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.11.2",
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.8.2",
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": "51fc34da66e457166ae636c047785303f949fdce"
66
+ "gitHead": "167f6b86b33867ef2ab10cc02624bc0441965632"
67
67
  }
package/webda.module.json CHANGED
@@ -27,6 +27,10 @@
27
27
  "channel": {
28
28
  "type": "string"
29
29
  },
30
+ "subscription": {
31
+ "type": "string",
32
+ "default": ""
33
+ },
30
34
  "exchange": {
31
35
  "type": "object",
32
36
  "properties": {