Skip to content

Commit 829c9e3

Browse files
authored
Merge pull request #35 from hapinessjs/next
Next into master
2 parents ec7e4ef + 1427747 commit 829c9e3

7 files changed

Lines changed: 39 additions & 23 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,12 @@ To set up your development environment:
453453
[Back to top](#table-of-contents)
454454

455455
## Change History
456+
* v1.4.2 (2018-06-11)
457+
* Do not retry to connect if closing server
458+
* v1.4.1 (2018-05-31)
459+
* Fix channel creation after reconnection
460+
* v1.4.0 (2018-04-24)
461+
* Refactor channel management to handle connection errors
456462
* v1.3.0 (2018-03-27)
457463
* Add shutdown (SIGTERM/SIGINT) support
458464
* v1.2.3 (2018-02-05)

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@hapiness/rabbitmq",
3-
"version": "1.4.1",
3+
"version": "1.4.2",
44
"description": "Hapiness module for rabbitmq",
55
"main": "commonjs/index.js",
66
"types": "index.d.ts",

src/module/managers/connection-manager.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class ConnectionManager extends EventEmitter {
1919
private _connect: typeof connect;
2020
private _defaultPrefetch: number;
2121
private _channelStore: ChannelStore;
22-
private _isSIGTERMReceived: boolean;
22+
private _closingServer: boolean;
2323

2424
constructor(config?: RabbitMQConfigConnection) {
2525
super();
@@ -28,6 +28,7 @@ export class ConnectionManager extends EventEmitter {
2828
this._connection = null;
2929
this._isConnecting = false;
3030
this._isConnected = false;
31+
this._closingServer = false;
3132
this._options = Object.assign({}, config);
3233
this._options.retry = Object.assign({ delay: 5000, maximum_attempts: -1 }, this._options.retry);
3334

@@ -48,9 +49,9 @@ export class ConnectionManager extends EventEmitter {
4849

4950
// Will block new connection if SIGTERM is received
5051
/* istanbul ignore next */
51-
process.once('SIGTERM', () => this._isSIGTERMReceived = true);
52+
process.once('SIGTERM', () => this._closingServer = true);
5253
/* istanbul ignore next */
53-
process.once('SIGINT', () => this._isSIGTERMReceived = true);
54+
process.once('SIGINT', () => this._closingServer = true);
5455

5556
this.setDefaultPrefetch(this._options.default_prefetch);
5657

@@ -88,13 +89,15 @@ export class ConnectionManager extends EventEmitter {
8889
return Observable.of(null)
8990
.flatMap(() => {
9091
debug('try to open connection ...');
91-
debug(this._options.retry.delay);
92+
debug(`Retry delay: ${this._options.retry.delay}`);
9293
return Observable.fromPromise(this._connect(this._uri));
9394
})
9495
.retryWhen(errors => {
9596
errors.forEach(err => debug(err.message, err.stack));
9697
return errors
98+
.scan(attempts => attempts + 1, 0)
9799
.delay(this._options.retry.delay)
100+
.takeWhile((attempts) => attempts < this._options.retry.maximum_attempts && !this._closingServer)
98101
.take(this._options.retry.maximum_attempts)
99102
.concat(Observable.throw(new Error('Retry limit exceeded')))
100103
});
@@ -105,11 +108,8 @@ export class ConnectionManager extends EventEmitter {
105108
return Observable.of(null);
106109
}
107110

108-
/* istanbul ignore next */
109-
if (this._isSIGTERMReceived) {
110-
return Observable.of(null);
111-
}
112111

112+
this._closingServer = false;
113113
this._isConnecting = true;
114114

115115
debug('Connecting', this._uri);
@@ -138,6 +138,7 @@ export class ConnectionManager extends EventEmitter {
138138

139139
close(): Observable<void> {
140140
this._isConnected = false;
141+
this._closingServer = true;
141142
return Observable.fromPromise(this._connection.close());
142143
}
143144

test/unit/extension/init-extension.test.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,20 @@ export class InitExtensionUnitTest {
2222
private queue: QueueManager;
2323
private userQueue;
2424

25-
before() {
26-
const connection = new ConnectionManagerMock();
27-
this.ch = new ChannelManager(connection);
28-
this.ch['ch'] = <any>new ChannelMock();
29-
this.userQueue = new UserQueue();
30-
this.queueWrapper = new QueueWrapper(this.userQueue, extractMetadataByDecorator(UserQueue, 'Queue'));
31-
this.messageRouter = new MessageRouter();
32-
this.queue = new QueueManager(this.ch, this.queueWrapper);
33-
unit.spy(this.userQueue, 'onMessage');
25+
before(done) {
26+
try {
27+
const connection = new ConnectionManagerMock();
28+
this.ch = new ChannelManager(connection);
29+
this.ch['ch'] = <any>new ChannelMock();
30+
this.userQueue = new UserQueue();
31+
this.queueWrapper = new QueueWrapper(this.userQueue, extractMetadataByDecorator(UserQueue, 'Queue'));
32+
this.messageRouter = new MessageRouter();
33+
this.queue = new QueueManager(this.ch, this.queueWrapper);
34+
unit.spy(this.userQueue, 'onMessage');
35+
done();
36+
} catch (err) {
37+
done(err);
38+
}
3439
}
3540

3641
after() {

test/unit/managers/connection.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ export class ConnectionUnitTest {
9797
unit.number(connectStub.callCount).is(3);
9898
done();
9999
},
100-
() => done(new Error('Should not be here'))
100+
(err) => {
101+
done(new Error('Should not be here'));
102+
}
101103
);
102104
}
103105

test/unit/managers/message-store.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,11 @@ export class MessageStoreTest {
8181
MessageStore['shutdownTimeoutMs'] = 500;
8282
MessageStore.addConsumer(<any>this.ch, 'consumer-1');
8383
MessageStore.addMessage(<any>{ uuid: 4 });
84-
MessageStore.shutdown(this.connection).subscribe(() => done(new Error('Cannot succeed')), err => {
85-
setTimeout(() => done(), 500);
86-
});
84+
MessageStore.shutdown(this.connection)
85+
.subscribe(() => done(new Error('Cannot succeed')), err => {
86+
setTimeout(() => done(), 500);
87+
});
88+
8789
setTimeout(() => {
8890
MessageStore.remove(<any>{ uuid: 4 });
8991
}, 510);

0 commit comments

Comments
 (0)