@droidsolutions-oss/amqp-ts 3.0.3 → 4.0.0-develop.1
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 +186 -45
- package/lib/AmqpProperties.js +1 -2
- package/lib/Binding.d.ts +36 -6
- package/lib/Binding.js +244 -75
- package/lib/Binding.js.map +1 -1
- package/lib/Connection/Connection.d.ts +87 -46
- package/lib/Connection/Connection.js +360 -181
- package/lib/Connection/Connection.js.map +1 -1
- package/lib/Connection/ConnectionMetrics.js +1 -2
- package/lib/Connection/RecoveryOptions.d.ts +6 -0
- package/lib/Connection/RecoveryOptions.js +2 -0
- package/lib/Connection/RecoveryOptions.js.map +1 -0
- package/lib/Connection/Topology.d.ts +1 -1
- package/lib/Connection/Topology.js +1 -2
- package/lib/Deferred.d.ts +18 -0
- package/lib/Deferred.js +33 -0
- package/lib/Deferred.js.map +1 -0
- package/lib/Exchange/DeclarationOptions.js +1 -2
- package/lib/Exchange/Exchange.d.ts +38 -17
- package/lib/Exchange/Exchange.js +204 -159
- package/lib/Exchange/Exchange.js.map +1 -1
- package/lib/Exchange/ExchangeType.js +1 -2
- package/lib/Exchange/InitializeResult.js +1 -2
- package/lib/LoggerFactory.js +1 -5
- package/lib/LoggerFactory.js.map +1 -1
- package/lib/Message.d.ts +11 -10
- package/lib/Message.js +66 -37
- package/lib/Message.js.map +1 -1
- package/lib/Queue/DeclarationOptions.js +1 -2
- package/lib/Queue/DeleteResult.js +1 -2
- package/lib/Queue/InitializeResult.js +1 -2
- package/lib/Queue/Queue.d.ts +87 -26
- package/lib/Queue/Queue.js +440 -207
- package/lib/Queue/Queue.js.map +1 -1
- package/lib/Queue/StartConsumerResult.js +1 -2
- package/lib/amqp-ts.d.ts +0 -1
- package/lib/amqp-ts.js +2 -7
- package/lib/amqp-ts.js.map +1 -1
- package/lib/errorMessage.d.ts +1 -0
- package/lib/errorMessage.js +18 -0
- package/lib/errorMessage.js.map +1 -0
- package/lib/index.d.ts +19 -14
- package/lib/index.js +7 -13
- package/lib/index.js.map +1 -1
- package/package.json +38 -60
- package/lib/Connection/ReconnectStrategy.d.ts +0 -4
- package/lib/Connection/ReconnectStrategy.js +0 -3
- package/lib/Connection/ReconnectStrategy.js.map +0 -1
package/lib/Binding.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class Binding {
|
|
1
|
+
import { Queue } from "./Queue/Queue.js";
|
|
2
|
+
export class Binding {
|
|
3
|
+
pattern;
|
|
4
|
+
args;
|
|
6
5
|
static id(destination, source, pattern) {
|
|
7
6
|
pattern = pattern || "";
|
|
8
7
|
return ("[" +
|
|
9
8
|
source.name +
|
|
10
9
|
"]to" +
|
|
11
|
-
(destination instanceof
|
|
10
|
+
(destination instanceof Queue ? "Queue" : "Exchange") +
|
|
12
11
|
"[" +
|
|
13
12
|
destination.name +
|
|
14
13
|
"]" +
|
|
@@ -25,88 +24,258 @@ class Binding {
|
|
|
25
24
|
}
|
|
26
25
|
return Promise.all(promises);
|
|
27
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* A promise that resolves once the binding is created. It is replaced by a pending promise while the binding is
|
|
29
|
+
* created again after a lost connection. It rejects when the binding or one of its ends fails on its own, or when
|
|
30
|
+
* the connection is closed or recovery gives up while it is pending.
|
|
31
|
+
*/
|
|
32
|
+
initialized;
|
|
33
|
+
/** @internal */
|
|
34
|
+
_source;
|
|
35
|
+
/** @internal */
|
|
36
|
+
_destination;
|
|
37
|
+
log;
|
|
38
|
+
_deferred;
|
|
39
|
+
/** The generation of the last initialization, and that initialization. */
|
|
40
|
+
_generation;
|
|
41
|
+
_initializing = Promise.resolve();
|
|
42
|
+
/** Changes with every initialization, so a superseded one can tell. */
|
|
43
|
+
_attempt = 0;
|
|
44
|
+
/** The creation of the binding on the broker that is in flight, if any. Never rejects. */
|
|
45
|
+
_creating = Promise.resolve();
|
|
46
|
+
/** Set once {@link delete} was called, after which nothing creates the binding again. */
|
|
47
|
+
_deleting;
|
|
28
48
|
constructor(destination, source, pattern = "", args = {}) {
|
|
29
49
|
this.pattern = pattern;
|
|
30
50
|
this.args = args;
|
|
31
51
|
this.log = destination.connection.loggerFactory(this.constructor);
|
|
32
52
|
this._source = source;
|
|
33
53
|
this._destination = destination;
|
|
34
|
-
this._destination.connection
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
const connection = this._destination.connection;
|
|
55
|
+
this._deferred = connection._createDeferred();
|
|
56
|
+
this.initialized = this._deferred.promise;
|
|
57
|
+
connection._bindings[this._id] = this;
|
|
58
|
+
connection._forgetFailure(this);
|
|
59
|
+
// while disconnected the next connect initializes it
|
|
60
|
+
if (connection._model) {
|
|
61
|
+
this._initialize(connection._model, connection._generation).catch(() => { });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Creates the binding on a short-lived channel of the given model once source and destination are initialized on
|
|
66
|
+
* the given generation, then settles {@link initialized}. Does nothing if the binding was already initialized for the
|
|
67
|
+
* given generation. A source on another connection is only waited for, its own connection initializes it.
|
|
68
|
+
* @internal
|
|
69
|
+
*/
|
|
70
|
+
_initialize(model, generation) {
|
|
71
|
+
if (this._deleting !== undefined) {
|
|
72
|
+
return this._initializing;
|
|
73
|
+
}
|
|
74
|
+
if (this._generation !== generation) {
|
|
75
|
+
this._generation = generation;
|
|
76
|
+
this._initializing = this._bind(model, generation, ++this._attempt);
|
|
77
|
+
}
|
|
78
|
+
return this._initializing;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates every binding from or to the given entity again. Used after the entity's channel closed and the entity
|
|
82
|
+
* was declared again, because a broker-side delete of an exchange or queue removes its bindings as well. Never
|
|
83
|
+
* rejects, every binding handles its own failure. Only the bindings kept by the entity's own connection are created
|
|
84
|
+
* again, so the given model is always that of their destination's connection.
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
static async _rebindContaining(connectionPoint, model) {
|
|
88
|
+
const bindings = Object.values(connectionPoint.connection._bindings).filter((binding) => binding._source === connectionPoint || binding._destination === connectionPoint);
|
|
89
|
+
await Promise.allSettled(bindings.map((binding) => binding._rebind(model)));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates the binding again on a short-lived channel of the given model, then resolves {@link initialized}. Unlike
|
|
93
|
+
* {@link _initialize} it does not wait for source and destination.
|
|
94
|
+
*
|
|
95
|
+
* A failure is never final. The other end may be gone at this moment (for example an autoDelete exchange the broker
|
|
96
|
+
* removed together with the queue), so the binding stays declared and {@link initialized} stays pending until the
|
|
97
|
+
* other end re-initializes, which re-binds, or the next connect does. It also does not supersede a running
|
|
98
|
+
* {@link _initialize}, which may still be waiting for a freshly declared end.
|
|
99
|
+
*
|
|
100
|
+
* A binding that was deleted or replaced by binding the same pair again meanwhile is settled right away, since
|
|
101
|
+
* nothing would create it again.
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
async _rebind(model) {
|
|
105
|
+
const destination = this._destination;
|
|
106
|
+
const source = this._source;
|
|
107
|
+
const connection = destination.connection;
|
|
108
|
+
if (this._deleting !== undefined) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this._invalidate();
|
|
112
|
+
try {
|
|
113
|
+
await this._create(model);
|
|
114
|
+
if (!connection._isModelClosed(model)) {
|
|
115
|
+
this._deferred.resolve(this);
|
|
116
|
+
}
|
|
117
|
+
else if (!this._isDeclared) {
|
|
118
|
+
this._deferred.reject(new Error("Connection closed while the binding was created"));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (!this._isDeclared) {
|
|
123
|
+
this._deferred.reject(err);
|
|
124
|
+
return;
|
|
54
125
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
exchange._channel.bindExchange(this._destination.name, this._source.name, this.pattern, this.args, (err, _ok) => {
|
|
59
|
-
/* istanbul ignore if */
|
|
60
|
-
if (err) {
|
|
61
|
-
this.log.error({ err }, "Failed to create exchange binding (%s->%s)", this._source.name, this._destination.name);
|
|
62
|
-
delete this._destination.connection._bindings[Binding.id(this._destination, this._source, this.pattern)];
|
|
63
|
-
reject(err);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
resolve(this);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
});
|
|
126
|
+
if (connection._isModelClosed(model)) {
|
|
127
|
+
// the next connect initializes it again, until then initialized stays pending
|
|
128
|
+
return;
|
|
70
129
|
}
|
|
71
|
-
|
|
130
|
+
this.log.warn({ err }, "Cannot re-create binding (%s->%s) yet, retrying when either end is declared again or on the next connect.", source.name, destination.name);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** @internal */
|
|
134
|
+
get _id() {
|
|
135
|
+
return Binding.id(this._destination, this._source, this.pattern);
|
|
136
|
+
}
|
|
137
|
+
/** Whether this binding is still declared, i.e. neither deleted, replaced nor removed together with a failed end. */
|
|
138
|
+
get _isDeclared() {
|
|
139
|
+
return this._destination.connection._bindings[this._id] === this;
|
|
72
140
|
}
|
|
73
141
|
/**
|
|
74
|
-
*
|
|
142
|
+
* Replaces a settled {@link initialized} with a pending one, until the binding is created again.
|
|
143
|
+
* @internal
|
|
75
144
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
145
|
+
_invalidate() {
|
|
146
|
+
if (this._deferred.settled) {
|
|
147
|
+
this._deferred = this._destination.connection._createDeferred();
|
|
148
|
+
this.initialized = this._deferred.promise;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Rejects {@link initialized} if it is still pending. Used when the connection is closed, recovery gave up or an end
|
|
153
|
+
* of the binding failed.
|
|
154
|
+
* @internal
|
|
155
|
+
*/
|
|
156
|
+
_rejectPending(err) {
|
|
157
|
+
if (!this._deferred.settled) {
|
|
158
|
+
this._deferred.reject(err);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Whether the source exchange belongs to another connection than the destination. The binding belongs to the
|
|
163
|
+
* destination's connection, while the source is initialized and recovered by its own connection only.
|
|
164
|
+
* @internal
|
|
165
|
+
*/
|
|
166
|
+
get _isCrossConnection() {
|
|
167
|
+
return this._source.connection !== this._destination.connection;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Creates the binding on a short-lived channel of the given model. The creation is tracked, so {@link delete} can
|
|
171
|
+
* wait for it instead of unbinding before it.
|
|
172
|
+
*/
|
|
173
|
+
_create(model) {
|
|
174
|
+
const destination = this._destination;
|
|
175
|
+
const source = this._source;
|
|
176
|
+
const creating = this._onOwnChannel(model, "Binding", (channel) => destination instanceof Queue
|
|
177
|
+
? channel.bindQueue(destination.name, source.name, this.pattern, this.args)
|
|
178
|
+
: channel.bindExchange(destination.name, source.name, this.pattern, this.args));
|
|
179
|
+
this._creating = creating.then(() => { }, () => { });
|
|
180
|
+
return creating;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Runs a bind or unbind on a short-lived channel of the given model. A failing bind or unbind closes the channel it
|
|
184
|
+
* runs on, so it must not be the destination's channel, which would then re-initialize, nor one shared with other
|
|
185
|
+
* bindings, which would then fail as well.
|
|
186
|
+
*/
|
|
187
|
+
async _onOwnChannel(model, operation, run) {
|
|
188
|
+
let channel;
|
|
189
|
+
try {
|
|
190
|
+
channel = await model.createChannel();
|
|
191
|
+
channel.on("error", (err) => {
|
|
192
|
+
this.log.debug({ err }, "%s %s->%s failed: %s", operation, this._source.name, this._destination.name, err.message);
|
|
193
|
+
});
|
|
194
|
+
await run(channel);
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
channel?.close().catch(() => { });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async _bind(model, generation, attempt) {
|
|
201
|
+
const destination = this._destination;
|
|
202
|
+
const source = this._source;
|
|
203
|
+
try {
|
|
204
|
+
// both are initialized on this generation already, unless they were declared after it started. A source on
|
|
205
|
+
// another connection is only waited for, as in 3.x: initializing it here would move it onto this connection
|
|
206
|
+
await Promise.all([
|
|
207
|
+
destination._initialize(model, generation),
|
|
208
|
+
this._isCrossConnection ? source.initialized : source._initialize(model, generation),
|
|
209
|
+
]);
|
|
210
|
+
if (attempt !== this._attempt) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (this._deleting !== undefined) {
|
|
214
|
+
throw new Error(`Binding ${this._id} was deleted`);
|
|
215
|
+
}
|
|
216
|
+
await this._create(model);
|
|
217
|
+
if (attempt !== this._attempt) {
|
|
218
|
+
return;
|
|
92
219
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
exchange.initialized.then(() => {
|
|
96
|
-
exchange._channel.unbindExchange(this._destination.name, this._source.name, this.pattern, this.args, (err, _ok) => {
|
|
97
|
-
/* istanbul ignore if */
|
|
98
|
-
if (err) {
|
|
99
|
-
reject(err);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
delete this._destination.connection._bindings[Binding.id(this._destination, this._source, this.pattern)];
|
|
103
|
-
resolve(null);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
});
|
|
220
|
+
if (destination.connection._isModelClosed(model)) {
|
|
221
|
+
throw new Error("Connection closed while the binding was created");
|
|
107
222
|
}
|
|
108
|
-
|
|
223
|
+
this._deferred.resolve(this);
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
if (attempt !== this._attempt) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (!this._isDeclared) {
|
|
230
|
+
// deleted, replaced or removed together with a failed end: nothing creates it again
|
|
231
|
+
this._rejectPending(err);
|
|
232
|
+
throw err;
|
|
233
|
+
}
|
|
234
|
+
if (destination.connection._isModelClosed(model)) {
|
|
235
|
+
// the next connect initializes it again, until then initialized stays pending
|
|
236
|
+
this.log.debug({ err }, "Connection lost while binding %s->%s.", source.name, destination.name);
|
|
237
|
+
throw err;
|
|
238
|
+
}
|
|
239
|
+
this.log.error({ err }, "Failed to create %s binding (%s->%s)", destination instanceof Queue ? "queue" : "exchange", source.name, destination.name);
|
|
240
|
+
delete destination.connection._bindings[Binding.id(destination, source, this.pattern)];
|
|
241
|
+
this._deferred.reject(err);
|
|
242
|
+
destination.connection._onEntityFailed(this, err);
|
|
243
|
+
throw err;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Deletes this binding of either a queue or an exchange. It is no longer declared from then on, so nothing creates it
|
|
248
|
+
* again, and an {@link initialized} that is still pending rejects. The unbind runs once the destination is
|
|
249
|
+
* initialized, on a short-lived channel. Deleting it again returns the same promise, also after a failure. A binding
|
|
250
|
+
* that was already replaced by binding the same pair again is only settled: the broker binding is the newer one's.
|
|
251
|
+
*/
|
|
252
|
+
delete() {
|
|
253
|
+
this._deleting ??= this._delete();
|
|
254
|
+
return this._deleting;
|
|
255
|
+
}
|
|
256
|
+
async _delete() {
|
|
257
|
+
const destination = this._destination;
|
|
258
|
+
const connection = destination.connection;
|
|
259
|
+
const declared = this._isDeclared;
|
|
260
|
+
if (declared) {
|
|
261
|
+
delete connection._bindings[this._id];
|
|
262
|
+
}
|
|
263
|
+
this._rejectPending(new Error(`Binding ${this._id} was deleted`));
|
|
264
|
+
if (!declared) {
|
|
265
|
+
// replaced by binding the same pair again, or removed with a failed end: the broker binding, if any, belongs to
|
|
266
|
+
// the binding that replaced it, so unbinding it here would remove it from under that one
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
await destination.initialized;
|
|
270
|
+
// a creation that is still in flight would create it again after the unbind
|
|
271
|
+
await this._creating;
|
|
272
|
+
const model = connection._activeModel;
|
|
273
|
+
if (model === undefined) {
|
|
274
|
+
throw new Error(`Connection lost while binding ${this._id} was deleted`);
|
|
275
|
+
}
|
|
276
|
+
await this._onOwnChannel(model, "Unbind", (channel) => destination instanceof Queue
|
|
277
|
+
? channel.unbindQueue(destination.name, this._source.name, this.pattern, this.args)
|
|
278
|
+
: channel.unbindExchange(destination.name, this._source.name, this.pattern, this.args));
|
|
109
279
|
}
|
|
110
280
|
}
|
|
111
|
-
exports.Binding = Binding;
|
|
112
281
|
//# sourceMappingURL=Binding.js.map
|
package/lib/Binding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Binding.js","sourceRoot":"","sources":["../src/Binding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Binding.js","sourceRoot":"","sources":["../src/Binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,60 +1,107 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { EventEmitter } from "events";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { Topology } from "./Topology";
|
|
1
|
+
import { type ChannelModel, type SocketOptions } from "amqplib";
|
|
2
|
+
import { EventEmitter } from "node:events";
|
|
3
|
+
import { DeclarationOptions as ExchangeDeclarationOptions } from "../Exchange/DeclarationOptions.js";
|
|
4
|
+
import { Exchange } from "../Exchange/Exchange.js";
|
|
5
|
+
import { ExchangeType } from "../Exchange/ExchangeType.js";
|
|
6
|
+
import { LoggerFactory } from "../LoggerFactory.js";
|
|
7
|
+
import { DeclarationOptions as QueueDeclarationOptions } from "../Queue/DeclarationOptions.js";
|
|
8
|
+
import { Queue } from "../Queue/Queue.js";
|
|
9
|
+
import { ConnectionMetrics } from "./ConnectionMetrics.js";
|
|
10
|
+
import { RecoveryOptions } from "./RecoveryOptions.js";
|
|
11
|
+
import { Topology } from "./Topology.js";
|
|
13
12
|
export declare class Connection extends EventEmitter {
|
|
14
13
|
loggerFactory?: LoggerFactory;
|
|
14
|
+
/**
|
|
15
|
+
* Resolves once the connection is established and the declared topology was set up. It is replaced by a pending
|
|
16
|
+
* promise when the connection is lost and resolves again after the next successful reconnect. It rejects when
|
|
17
|
+
* recovery gives up or the connection is closed before it was established.
|
|
18
|
+
*
|
|
19
|
+
* It only reflects the connection: an exchange, queue, binding or consumer that fails on its own does not keep it
|
|
20
|
+
* from resolving. Use {@link completeConfiguration} to wait for the topology.
|
|
21
|
+
*/
|
|
15
22
|
initialized: Promise<void>;
|
|
16
|
-
connection: AmqpLib.Connection;
|
|
17
23
|
isConnected: boolean;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
private url;
|
|
28
|
-
private socketOptions;
|
|
29
|
-
private reconnectStrategy;
|
|
30
|
-
private connectedBefore;
|
|
31
|
-
private _retry;
|
|
32
|
-
private _rebuilding;
|
|
24
|
+
private _deferred;
|
|
25
|
+
private _recovering;
|
|
26
|
+
/** Counter for connect attempts that reach `setup`; each of them gets its own generation. */
|
|
27
|
+
private _lastGeneration;
|
|
28
|
+
/** The model `setup` is currently running for, and its generation. */
|
|
29
|
+
private _setupModel;
|
|
30
|
+
private _setupGeneration;
|
|
31
|
+
private _closedModels;
|
|
32
|
+
private _connectedBefore;
|
|
33
33
|
private _isClosing;
|
|
34
|
+
private _closing;
|
|
35
|
+
/** Why recovery is over, set by {@link close} or when recovery gave up. Nothing is initialized after that. */
|
|
36
|
+
private _stopError;
|
|
37
|
+
/** Why exchanges, queues and bindings failed on their own, until the same one is declared again. */
|
|
38
|
+
private _failures;
|
|
34
39
|
private log;
|
|
35
40
|
private _sentMessagesCounter;
|
|
36
41
|
private _receivedMessagesCounter;
|
|
37
42
|
/**
|
|
38
43
|
*
|
|
39
44
|
* @param url The url to RabbitMQ
|
|
40
|
-
* @param socketOptions Socket options are passed to
|
|
41
|
-
* @param
|
|
45
|
+
* @param socketOptions Socket options are passed to amqplib's `connect`.
|
|
46
|
+
* @param recovery Options for the automatic reconnect, passed to amqplib's connection recovery. By default it retries
|
|
47
|
+
* forever with exponential backoff.
|
|
42
48
|
* @param loggerFactory A factory function that returns a logger.
|
|
43
49
|
*/
|
|
44
|
-
constructor(url?: string, socketOptions?:
|
|
45
|
-
tryToConnect(thisConnection: Connection, retry: number, callback: (err: any) => void): void;
|
|
46
|
-
_rebuildAll(err: Error): Promise<void>;
|
|
50
|
+
constructor(url?: string, socketOptions?: SocketOptions, recovery?: RecoveryOptions, loggerFactory?: LoggerFactory);
|
|
47
51
|
close(): Promise<void>;
|
|
52
|
+
private static _failureKey;
|
|
53
|
+
private _close;
|
|
54
|
+
/**
|
|
55
|
+
* Recovery is over, because of {@link close} or because it gave up: rejects every promise that is still pending,
|
|
56
|
+
* the connection's and the entities', since nothing settles them any more.
|
|
57
|
+
*/
|
|
58
|
+
private _stop;
|
|
59
|
+
/**
|
|
60
|
+
* Emits an event to the user's listeners. Most events are emitted from within amqplib's recovery, where a throwing
|
|
61
|
+
* listener would stop the reconnect from being scheduled, or from a promise chain, where it would be an unhandled
|
|
62
|
+
* rejection. So a listener's error is logged instead, and the listeners after it still get the event. The order is
|
|
63
|
+
* that of `emit`, and `once` listeners remove themselves as usual.
|
|
64
|
+
*/
|
|
65
|
+
private _emitSafely;
|
|
66
|
+
private _listen;
|
|
67
|
+
/**
|
|
68
|
+
* Runs after every successful (re)connect, before amqplib installs the model: rebuilds the topology on fresh
|
|
69
|
+
* channels. It only throws when the model itself closed meanwhile, which makes amqplib schedule another reconnect.
|
|
70
|
+
*/
|
|
71
|
+
private _setup;
|
|
72
|
+
/**
|
|
73
|
+
* Initializes every entity that is not initialized on the given generation yet: exchanges, then queues, then
|
|
74
|
+
* bindings, then queue consumers. Entity failures are handled by the entities themselves.
|
|
75
|
+
*
|
|
76
|
+
* A binding whose source exchange belongs to another connection waits for that connection, so it is not awaited:
|
|
77
|
+
* an outage of the other connection must not hold up this one's recovery.
|
|
78
|
+
*/
|
|
79
|
+
private _declareEntities;
|
|
80
|
+
private _onConnect;
|
|
81
|
+
private _onDisconnect;
|
|
82
|
+
/** Recovery gave up: no further reconnect is attempted. */
|
|
83
|
+
private _giveUp;
|
|
84
|
+
/** Replaces a settled {@link initialized} with a pending one. */
|
|
85
|
+
private _invalidate;
|
|
48
86
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
87
|
+
* Waits until the whole declared topology is initialized: every exchange, queue and binding, and the consumer of
|
|
88
|
+
* every queue with an activated consumer. Use it to gate the start of an application, since {@link initialized}
|
|
89
|
+
* only reflects the connection.
|
|
51
90
|
*
|
|
52
|
-
*
|
|
91
|
+
* It rejects when one of them failed on its own, at the first connect or later. A failed exchange, queue or binding
|
|
92
|
+
* counts until one with the same name is declared again (or {@link deleteConfiguration} is called), a refused
|
|
93
|
+
* consumer until it is registered on the next reconnect. While the connection is down it waits for the reconnect.
|
|
94
|
+
*
|
|
95
|
+
* @return A promise that fulfills after all defined exchanges, queues, bindings and consumers are initialized.
|
|
53
96
|
*/
|
|
54
97
|
completeConfiguration(): Promise<any>;
|
|
55
98
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
99
|
+
* Deletes the whole defined topology in phases: first the bindings, then the queues together with their consumers,
|
|
100
|
+
* then the exchanges. Deleting a queue or an exchange deletes its bindings as well, so running the phases one after
|
|
101
|
+
* the other unbinds every binding only once. A phase that fails does not stop the next one.
|
|
102
|
+
*
|
|
103
|
+
* @return A promise that fulfills after all defined exchanges, queues and bindings have been removed, and rejects
|
|
104
|
+
* with the first failure otherwise.
|
|
58
105
|
*/
|
|
59
106
|
deleteConfiguration(): Promise<any>;
|
|
60
107
|
/**
|
|
@@ -92,17 +139,11 @@ export declare class Connection extends EventEmitter {
|
|
|
92
139
|
*/
|
|
93
140
|
declareQueueAsync(name: string, options?: QueueDeclarationOptions): Promise<Queue>;
|
|
94
141
|
declareTopology(topology: Topology): Promise<any>;
|
|
95
|
-
|
|
142
|
+
/** The current underlying amqplib model, `undefined` while disconnected. */
|
|
143
|
+
get getConnection(): ChannelModel | undefined;
|
|
96
144
|
/**
|
|
97
145
|
* Returns an object with metrics about the connection.
|
|
98
146
|
* @returns An object containing metrics about the connection.
|
|
99
147
|
*/
|
|
100
148
|
getMetrics(): ConnectionMetrics;
|
|
101
|
-
private rebuildConnection;
|
|
102
|
-
/**
|
|
103
|
-
* Increments an internal counter.
|
|
104
|
-
* @param counter The counter to increase.
|
|
105
|
-
* @param value The increment, default is 1.
|
|
106
|
-
*/
|
|
107
|
-
_increaseCounter(counter: "receivedMessages" | "sentMessages", value?: number): void;
|
|
108
149
|
}
|