@axinom/mosaic-message-bus 0.37.3-rc.1 → 0.38.0-rc.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/dist/broker.d.ts +42 -0
- package/dist/broker.d.ts.map +1 -1
- package/dist/broker.js +22 -0
- package/dist/broker.js.map +1 -1
- package/package.json +3 -3
- package/src/broker.ts +77 -1
package/dist/broker.d.ts
CHANGED
|
@@ -3,6 +3,18 @@ import { Connection } from 'amqplib';
|
|
|
3
3
|
import { BrokerConfig, PublicationSession, SubscriberSessionAsPromised, SubscriptionConfig } from 'rascal';
|
|
4
4
|
import { MessageHandler } from './message-handler';
|
|
5
5
|
import { MessageEnvelopeOverrides, MessagePublicationConfig, OnMessageMiddleware, SigningDetails } from './types';
|
|
6
|
+
export interface ConnectionDetails {
|
|
7
|
+
connectionUrl: string;
|
|
8
|
+
vhost: string;
|
|
9
|
+
}
|
|
10
|
+
export interface BrokerErrorEvent {
|
|
11
|
+
error: Error;
|
|
12
|
+
connection: ConnectionDetails;
|
|
13
|
+
}
|
|
14
|
+
export interface BrokerReconnectedEvent {
|
|
15
|
+
connection: ConnectionDetails;
|
|
16
|
+
disconnectedDurationInMilliseconds: number;
|
|
17
|
+
}
|
|
6
18
|
/**
|
|
7
19
|
* A wrapper around rascal broker to be used by Mosaic services.
|
|
8
20
|
*/
|
|
@@ -14,6 +26,8 @@ export declare class BrokerProxy {
|
|
|
14
26
|
private subscriptions;
|
|
15
27
|
private publications;
|
|
16
28
|
private isConnectedToBroker;
|
|
29
|
+
private eventEmitter;
|
|
30
|
+
private lastDisconnectedAt?;
|
|
17
31
|
private constructor();
|
|
18
32
|
private attachBrokerHandlers;
|
|
19
33
|
private onBrokerVhostInitialized;
|
|
@@ -113,5 +127,33 @@ export declare class BrokerProxy {
|
|
|
113
127
|
* Returns a boolean indicating if the service is connected to the Broker.
|
|
114
128
|
*/
|
|
115
129
|
isConnected(): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Subscribes to the 'error' event, which is emitted when the broker encounters an error.
|
|
132
|
+
* @param event - The event name ('error').
|
|
133
|
+
* @param listener - A callback function that receives a `BrokerErrorEvent` object containing:
|
|
134
|
+
* - `error`: The error that occurred.
|
|
135
|
+
* - `connection`: Details about the connection where the error occurred.
|
|
136
|
+
*/
|
|
137
|
+
on(event: 'error', listener: (data: BrokerErrorEvent) => void): void;
|
|
138
|
+
/**
|
|
139
|
+
* Subscribes to the 'reconnected' event, which is emitted when the broker successfully reconnects.
|
|
140
|
+
* @param event - The event name ('reconnected').
|
|
141
|
+
* @param listener - A callback function that receives a `BrokerReconnectedEvent` object containing:
|
|
142
|
+
* - `connection`: Details about the re-established connection.
|
|
143
|
+
* - `disconnectedDurationInMilliseconds`: The duration (in milliseconds) for which the connection was lost.
|
|
144
|
+
*/
|
|
145
|
+
on(event: 'reconnected', listener: (data: BrokerReconnectedEvent) => void): void;
|
|
146
|
+
/**
|
|
147
|
+
* Unsubscribes from the 'error' event.
|
|
148
|
+
* @param event - The event name ('error').
|
|
149
|
+
* @param listener - The callback function to remove.
|
|
150
|
+
*/
|
|
151
|
+
off(event: 'error', listener: (data: BrokerErrorEvent) => void): void;
|
|
152
|
+
/**
|
|
153
|
+
* Unsubscribes from the 'reconnected' event.
|
|
154
|
+
* @param event - The event name ('reconnected').
|
|
155
|
+
* @param listener - The callback function to remove.
|
|
156
|
+
*/
|
|
157
|
+
off(event: 'reconnected', listener: (data: BrokerReconnectedEvent) => void): void;
|
|
116
158
|
}
|
|
117
159
|
//# sourceMappingURL=broker.d.ts.map
|
package/dist/broker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAEL,YAAY,EACZ,kBAAkB,EAClB,2BAA2B,EAC3B,kBAAkB,EAEnB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAaD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,kCAAkC,EAAE,MAAM,CAAC;CAC5C;AAED;;GAEG;AACH,qBAAa,WAAW;IAYpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY,CAAC;IAbvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IAErC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,YAAY,CAAkC;IAGtD,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAO;IAElC,OAAO;IAQP,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;YAQP,eAAe;IAa7B,OAAO,CAAC,cAAc;IAUtB;;OAEG;WACiB,MAAM,CACxB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACxC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC;IASvB;;;;OAIG;IACU,iBAAiB,CAAC,QAAQ,EACrC,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,EACjC,UAAU,GAAE,mBAAmB,EAAO,GACrC,OAAO,CAAC,2BAA2B,CAAC;IAKvC;;;;;;;;;;OAUG;IACU,OAAO,CAAC,CAAC,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EACpD,OAAO,EAAE,CAAC,EACV,iBAAiB,CAAC,EAAE,wBAAwB,EAC5C,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAS9B;;;;;;;;OAQG;IACU,cAAc,CAAC,CAAC,EAC3B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EACpD,OAAO,EAAE,CAAC,EACV,iBAAiB,CAAC,EAAE,wBAAwB,EAC5C,aAAa,CAAC,EAAE,wBAAwB,GACvC,OAAO,CAAC,kBAAkB,CAAC;IAS9B;;;;;;;;OAQG;IACU,YAAY,CAAC,CAAC,EACzB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EACpD,OAAO,EAAE,CAAC,EACV,iBAAiB,CAAC,EAAE,wBAAwB,EAC5C,WAAW,CAAC,EAAE,wBAAwB,GACrC,OAAO,CAAC,kBAAkB,CAAC;IAU9B;;;;OAIG;IACU,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAItD;;;OAGG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;;OAGG;IACU,SAAS,CACpB,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,2BAA2B,CAAC;IAIvC;;OAEG;IACI,WAAW,IAAI,OAAO;IAI7B;;;;;;OAMG;IACI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAE3E;;;;;;OAMG;IACI,EAAE,CACP,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,GAC/C,IAAI;IAQP;;;;OAIG;IACI,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAE5E;;;;OAIG;IACI,GAAG,CACR,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,GAC/C,IAAI;CAOR"}
|
package/dist/broker.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BrokerProxy = void 0;
|
|
7
|
+
const events_1 = require("events");
|
|
7
8
|
const rascal_1 = require("rascal");
|
|
8
9
|
const common_1 = require("./common");
|
|
9
10
|
const publication_1 = __importDefault(require("./publication"));
|
|
@@ -22,6 +23,7 @@ class BrokerProxy {
|
|
|
22
23
|
// Rascal always establishes a connection during the BrokerProxy creation, and the service itself will
|
|
23
24
|
// fail if the broker connection fails. If this code is run, it's ensured the service has connected to the Broker.
|
|
24
25
|
this.isConnectedToBroker = true;
|
|
26
|
+
this.eventEmitter = new events_1.EventEmitter();
|
|
25
27
|
this.attachBrokerHandlers();
|
|
26
28
|
}
|
|
27
29
|
attachBrokerHandlers() {
|
|
@@ -33,6 +35,14 @@ class BrokerProxy {
|
|
|
33
35
|
this.broker.on('ready', this.onBrokerReady.bind(this));
|
|
34
36
|
}
|
|
35
37
|
onBrokerVhostInitialized(connection) {
|
|
38
|
+
const now = new Date();
|
|
39
|
+
const disconnectedDurationInMilliseconds = this.lastDisconnectedAt
|
|
40
|
+
? now.getTime() - this.lastDisconnectedAt.getTime()
|
|
41
|
+
: 0;
|
|
42
|
+
this.eventEmitter.emit('reconnected', {
|
|
43
|
+
connection,
|
|
44
|
+
disconnectedDurationInMilliseconds,
|
|
45
|
+
});
|
|
36
46
|
this.isConnectedToBroker = true;
|
|
37
47
|
this.logger.debug({
|
|
38
48
|
context: 'BrokerVhostInitialized',
|
|
@@ -41,6 +51,8 @@ class BrokerProxy {
|
|
|
41
51
|
});
|
|
42
52
|
}
|
|
43
53
|
onBrokerError(error, connection) {
|
|
54
|
+
this.lastDisconnectedAt = new Date();
|
|
55
|
+
this.eventEmitter.emit('error', { error, connection });
|
|
44
56
|
this.isConnectedToBroker = false;
|
|
45
57
|
this.logger.error(error, {
|
|
46
58
|
context: 'BrokerError',
|
|
@@ -207,6 +219,16 @@ class BrokerProxy {
|
|
|
207
219
|
isConnected() {
|
|
208
220
|
return this.isConnectedToBroker;
|
|
209
221
|
}
|
|
222
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
223
|
+
on(...args) {
|
|
224
|
+
const [event, listener] = args;
|
|
225
|
+
this.eventEmitter.on(event, listener);
|
|
226
|
+
}
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
228
|
+
off(...args) {
|
|
229
|
+
const [event, listener] = args;
|
|
230
|
+
this.eventEmitter.off(event, listener);
|
|
231
|
+
}
|
|
210
232
|
}
|
|
211
233
|
exports.BrokerProxy = BrokerProxy;
|
|
212
234
|
//# sourceMappingURL=broker.js.map
|
package/dist/broker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":";;;;;;AAGA,mCAOgB;AAChB,qCAAuE;AAEvE,gEAAwC;AACxC,kEAA0C;
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":";;;;;;AAGA,mCAAsC;AACtC,mCAOgB;AAChB,qCAAuE;AAEvE,gEAAwC;AACxC,kEAA0C;AAkC1C;;GAEG;AACH,MAAa,WAAW;IAWtB,YACU,MAAwB,EACxB,MAAc,EACd,YAA6B;QAF7B,WAAM,GAAN,MAAM,CAAkB;QACxB,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAAiB;QAZvC,8DAA8D;QACtD,kBAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;QACrD,iBAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;QACtD,sGAAsG;QACtG,kHAAkH;QAC1G,wBAAmB,GAAG,IAAI,CAAC;QAC3B,iBAAY,GAAG,IAAI,qBAAY,EAAE,CAAC;QAQxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,MAAM,CAAC,EAAE,CACZ,mBAAmB,EACnB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CACzC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,wBAAwB,CAAC,UAA6B;QAC5D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,kCAAkC,GAAG,IAAI,CAAC,kBAAkB;YAChE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACnD,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE;YACpC,UAAU;YACV,kCAAkC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,UAAU,UAAU,CAAC,KAAK,4BAA4B,UAAU,CAAC,aAAa,GAAG;YAC1F,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,KAAY,EAAE,UAA6B;QAC/D,IAAI,CAAC,kBAAkB,GAAG,IAAI,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;YACvB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,UAAU,UAAU,CAAC,KAAK,mCAAmC,UAAU,CAAC,aAAa,GAAG;YACjG,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,MAAc,EAAE,UAA6B;QACnE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,UAAU,UAAU,CAAC,KAAK,kCAAkC,UAAU,CAAC,aAAa,aAAa,MAAM,EAAE;YAClH,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CACvB,MAAc,EACd,UAA6B;QAE7B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,UAAU,UAAU,CAAC,KAAK,oCAAoC,UAAU,CAAC,aAAa,aAAa,MAAM,EAAE;YACpH,OAAO,EAAE,EAAE,UAAU,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,KAAkB;QACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,UAAU,KAAK,CAAC,KAAK,mBAAmB,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,KAAK,WAAW,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,QAAQ,gBAAgB,KAAK,CAAC,SAAS,GAAG;YACtK,OAAO,EAAE,EAAE,KAAK,EAAE;SACnB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,KAAkB;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,SAAS,KAAK,CAAC,KAAK,+BAA+B,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,KAAK,WAAW,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,QAAQ,gBAAgB,KAAK,CAAC,SAAS,GAAG;YACjL,OAAO,EAAE,EAAE,KAAK,EAAE;SACnB,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,OAAiC,EACjC,aAAoC,EAAE;QAEtC,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEtD,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,IAAI,sBAAY,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;SAClD;QACD,OAAO,GAA6B,CAAC;IACvC,CAAC;IAEO,cAAc,CAAC,WAAiC;QACtD,MAAM,GAAG,GAAG,IAAA,8BAAqB,EAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE;YAChB,WAAW,GAAG,IAAI,qBAAW,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;SACzC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,MAAoB,EACpB,MAAc,EACd,aAAsC,EAAE,EACxC,OAAwB;QAExB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,GAAG,GAAG,IAAA,0BAAiB,EAAC,MAAM,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,yBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SAC1D;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,iBAAiB,CAC5B,OAAiC,EACjC,aAAoC,EAAE;QAEtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrE,OAAO,YAAY,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED;;;;;;;;;;OAUG;IACI,KAAK,CAAC,OAAO,CAClB,WAAmB,EACnB,IAAoD,EACpD,OAAU,EACV,iBAA4C,EAC5C,OAAkC;QAElC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CACtC,WAAW,EACX,OAAO,EACP,iBAAiB,EACjB,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,cAAc,CACzB,WAAmB,EACnB,IAAoD,EACpD,OAAU,EACV,iBAA4C,EAC5C,aAAwC;QAExC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CACtC,WAAW,EACX,OAAO,EACP,iBAAiB,EACjB,aAAa,CACd,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,YAAY,CACvB,WAAmB,EACnB,IAAoD,EACpD,OAAU,EACV,iBAA4C,EAC5C,WAAsC;QAEtC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CACtC,WAAW,EACX,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,IAAI,CAAC,YAAY,CAClB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,GAAW;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,IAAI;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAK;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAS,CACpB,GAAW,EACX,SAA8B;QAE9B,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAuBD,8DAA8D;IACvD,EAAE,CAAC,GAAG,IAAW;QACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAmBD,8DAA8D;IACvD,GAAG,CAAC,GAAG,IAAW;QACvB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AArVD,kCAqVC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axinom/mosaic-message-bus",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0-rc.0",
|
|
4
4
|
"description": "Messaging library for Axinom Mosaic services",
|
|
5
5
|
"author": "Axinom",
|
|
6
6
|
"license": "PROPRIETARY",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@axinom/mosaic-message-bus-abstractions": "^0.24.0",
|
|
35
|
-
"@axinom/mosaic-service-common": "^0.59.3-rc.
|
|
35
|
+
"@axinom/mosaic-service-common": "^0.59.3-rc.2",
|
|
36
36
|
"amqplib": "^0.10.3",
|
|
37
37
|
"dotenv": "^8.2.0",
|
|
38
38
|
"graphql": "^15.4.0",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"publishConfig": {
|
|
66
66
|
"access": "public"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "6d97000843997ffd1617fc38cc3e5b090f84dca3"
|
|
69
69
|
}
|
package/src/broker.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
2
|
import { Logger } from '@axinom/mosaic-service-common';
|
|
3
3
|
import { Connection } from 'amqplib';
|
|
4
|
+
import { EventEmitter } from 'events';
|
|
4
5
|
import {
|
|
5
6
|
BrokerAsPromised,
|
|
6
7
|
BrokerConfig,
|
|
@@ -20,7 +21,7 @@ import {
|
|
|
20
21
|
SigningDetails,
|
|
21
22
|
} from './types';
|
|
22
23
|
|
|
23
|
-
interface ConnectionDetails {
|
|
24
|
+
export interface ConnectionDetails {
|
|
24
25
|
connectionUrl: string;
|
|
25
26
|
vhost: string;
|
|
26
27
|
}
|
|
@@ -36,6 +37,16 @@ interface BrokerStats {
|
|
|
36
37
|
max: number;
|
|
37
38
|
}
|
|
38
39
|
|
|
40
|
+
export interface BrokerErrorEvent {
|
|
41
|
+
error: Error;
|
|
42
|
+
connection: ConnectionDetails;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface BrokerReconnectedEvent {
|
|
46
|
+
connection: ConnectionDetails;
|
|
47
|
+
disconnectedDurationInMilliseconds: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
39
50
|
/**
|
|
40
51
|
* A wrapper around rascal broker to be used by Mosaic services.
|
|
41
52
|
*/
|
|
@@ -47,6 +58,8 @@ export class BrokerProxy {
|
|
|
47
58
|
// Rascal always establishes a connection during the BrokerProxy creation, and the service itself will
|
|
48
59
|
// fail if the broker connection fails. If this code is run, it's ensured the service has connected to the Broker.
|
|
49
60
|
private isConnectedToBroker = true;
|
|
61
|
+
private eventEmitter = new EventEmitter();
|
|
62
|
+
private lastDisconnectedAt?: Date;
|
|
50
63
|
|
|
51
64
|
private constructor(
|
|
52
65
|
private broker: BrokerAsPromised,
|
|
@@ -69,6 +82,16 @@ export class BrokerProxy {
|
|
|
69
82
|
}
|
|
70
83
|
|
|
71
84
|
private onBrokerVhostInitialized(connection: ConnectionDetails): void {
|
|
85
|
+
const now = new Date();
|
|
86
|
+
const disconnectedDurationInMilliseconds = this.lastDisconnectedAt
|
|
87
|
+
? now.getTime() - this.lastDisconnectedAt.getTime()
|
|
88
|
+
: 0;
|
|
89
|
+
|
|
90
|
+
this.eventEmitter.emit('reconnected', {
|
|
91
|
+
connection,
|
|
92
|
+
disconnectedDurationInMilliseconds,
|
|
93
|
+
});
|
|
94
|
+
|
|
72
95
|
this.isConnectedToBroker = true;
|
|
73
96
|
this.logger.debug({
|
|
74
97
|
context: 'BrokerVhostInitialized',
|
|
@@ -78,6 +101,9 @@ export class BrokerProxy {
|
|
|
78
101
|
}
|
|
79
102
|
|
|
80
103
|
private onBrokerError(error: Error, connection: ConnectionDetails): void {
|
|
104
|
+
this.lastDisconnectedAt = new Date();
|
|
105
|
+
this.eventEmitter.emit('error', { error, connection });
|
|
106
|
+
|
|
81
107
|
this.isConnectedToBroker = false;
|
|
82
108
|
this.logger.error(error, {
|
|
83
109
|
context: 'BrokerError',
|
|
@@ -315,4 +341,54 @@ export class BrokerProxy {
|
|
|
315
341
|
public isConnected(): boolean {
|
|
316
342
|
return this.isConnectedToBroker;
|
|
317
343
|
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Subscribes to the 'error' event, which is emitted when the broker encounters an error.
|
|
347
|
+
* @param event - The event name ('error').
|
|
348
|
+
* @param listener - A callback function that receives a `BrokerErrorEvent` object containing:
|
|
349
|
+
* - `error`: The error that occurred.
|
|
350
|
+
* - `connection`: Details about the connection where the error occurred.
|
|
351
|
+
*/
|
|
352
|
+
public on(event: 'error', listener: (data: BrokerErrorEvent) => void): void;
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Subscribes to the 'reconnected' event, which is emitted when the broker successfully reconnects.
|
|
356
|
+
* @param event - The event name ('reconnected').
|
|
357
|
+
* @param listener - A callback function that receives a `BrokerReconnectedEvent` object containing:
|
|
358
|
+
* - `connection`: Details about the re-established connection.
|
|
359
|
+
* - `disconnectedDurationInMilliseconds`: The duration (in milliseconds) for which the connection was lost.
|
|
360
|
+
*/
|
|
361
|
+
public on(
|
|
362
|
+
event: 'reconnected',
|
|
363
|
+
listener: (data: BrokerReconnectedEvent) => void,
|
|
364
|
+
): void;
|
|
365
|
+
|
|
366
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
367
|
+
public on(...args: any[]): void {
|
|
368
|
+
const [event, listener] = args;
|
|
369
|
+
this.eventEmitter.on(event, listener);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Unsubscribes from the 'error' event.
|
|
374
|
+
* @param event - The event name ('error').
|
|
375
|
+
* @param listener - The callback function to remove.
|
|
376
|
+
*/
|
|
377
|
+
public off(event: 'error', listener: (data: BrokerErrorEvent) => void): void;
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Unsubscribes from the 'reconnected' event.
|
|
381
|
+
* @param event - The event name ('reconnected').
|
|
382
|
+
* @param listener - The callback function to remove.
|
|
383
|
+
*/
|
|
384
|
+
public off(
|
|
385
|
+
event: 'reconnected',
|
|
386
|
+
listener: (data: BrokerReconnectedEvent) => void,
|
|
387
|
+
): void;
|
|
388
|
+
|
|
389
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
390
|
+
public off(...args: any[]): void {
|
|
391
|
+
const [event, listener] = args;
|
|
392
|
+
this.eventEmitter.off(event, listener);
|
|
393
|
+
}
|
|
318
394
|
}
|