From 9eb7fee003faca8fae0e885ad33539f18d75cf89 Mon Sep 17 00:00:00 2001 From: Antoine Gomez Date: Mon, 20 Aug 2018 15:59:06 +0200 Subject: [PATCH 1/2] Emit Retry Limit Exceeded error --- package-lock.json | 2 +- package.json | 2 +- src/module/managers/connection-manager.ts | 9 +++++++-- src/module/rabbitmq.extension.ts | 4 +++- test/unit/managers/connection.test.ts | 19 +++++++++++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9b768d7..f14a7b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@hapiness/rabbitmq", - "version": "1.4.2", + "version": "1.4.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d28583d..db011a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hapiness/rabbitmq", - "version": "1.4.2", + "version": "1.4.3", "description": "Hapiness module for rabbitmq", "main": "commonjs/index.js", "types": "index.d.ts", diff --git a/src/module/managers/connection-manager.ts b/src/module/managers/connection-manager.ts index 4ef92e5..15b5532 100644 --- a/src/module/managers/connection-manager.ts +++ b/src/module/managers/connection-manager.ts @@ -8,6 +8,8 @@ import { ChannelStore } from './channel-store'; import { ChannelManager } from './channel-manager'; const debug = require('debug')('hapiness:rabbitmq'); +const retryLimitErr: any = new Error('Retry limit exceeded'); +retryLimitErr.code = 'RETRY_LIMIT_EXCEEDED'; export class ConnectionManager extends EventEmitter { private _connection: Connection; @@ -99,7 +101,7 @@ export class ConnectionManager extends EventEmitter { .delay(this._options.retry.delay) .takeWhile((attempts) => attempts < this._options.retry.maximum_attempts && !this._closingServer) .take(this._options.retry.maximum_attempts) - .concat(Observable.throw(new Error('Retry limit exceeded'))) + .concat(Observable.throw(retryLimitErr)) }); } @@ -108,7 +110,6 @@ export class ConnectionManager extends EventEmitter { return Observable.of(null); } - this._closingServer = false; this._isConnecting = true; @@ -117,6 +118,10 @@ export class ConnectionManager extends EventEmitter { this.emitEvent('connecting'); const obs = this.openConnection(); return obs + .catch(err => { + this.emitEvent('error', err); + return Observable.throw(err); + }) .flatMap(con => { debug('connected, creating default channel ...'); this._connection = con; diff --git a/src/module/rabbitmq.extension.ts b/src/module/rabbitmq.extension.ts index e85acf5..2840fe1 100644 --- a/src/module/rabbitmq.extension.ts +++ b/src/module/rabbitmq.extension.ts @@ -61,7 +61,9 @@ export class RabbitMQExt implements OnExtensionLoad, OnModuleInstantiated, OnShu connection .connect() .flatMap(() => RegisterAnnotations.bootstrap(module, connection)) - .subscribe(() => {}, err => errorHandler(err)); + .subscribe(() => {}, err => { + errorHandler(err); + }); }); return RegisterAnnotations.bootstrap(module, connection); diff --git a/test/unit/managers/connection.test.ts b/test/unit/managers/connection.test.ts index 49a49b1..e8607e1 100644 --- a/test/unit/managers/connection.test.ts +++ b/test/unit/managers/connection.test.ts @@ -136,4 +136,23 @@ export class ConnectionUnitTest { instance.setDefaultPrefetch(5); unit.number(instance.getDefaultPrefetch()).is(5); } + + @test(' - Test openConnection error') + testOpenConnectionError(done) { + const instance = new ConnectionManager({ retry: { delay: 100, maximum_attempts: 1 } }); + instance['_connection'] = new RabbitConnectionMock(); + unit.stub(instance, '_connect').returns(Promise.reject(Observable.throw(new Error('Woopsie')))); + + Observable.forkJoin([ + Observable.fromEvent(instance, 'error').map(err => { + unit.object(err).isInstanceOf(Error).hasProperty('code', 'RETRY_LIMIT_EXCEEDED'); + }), + instance.connect() + .catch(err => { + unit.object(err).isInstanceOf(Error).hasProperty('code', 'RETRY_LIMIT_EXCEEDED'); + return Observable.throw(null); + }) + .flatMap(() => Observable.throw(new Error('Cannot be here'))) + ]).subscribe(() => done(), err => done(err)); + } } From 46490a900dba0df99ea41b36ec86f21ddd8a33f9 Mon Sep 17 00:00:00 2001 From: Antoine Gomez Date: Mon, 20 Aug 2018 16:10:10 +0200 Subject: [PATCH 2/2] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a5dc6ac..b2402bb 100644 --- a/README.md +++ b/README.md @@ -453,6 +453,8 @@ To set up your development environment: [Back to top](#table-of-contents) ## Change History +* v1.4.3 (2018-08-20) + * Emit RETRY_LIMIT_EXCEEDED error on ConnectionManager * v1.4.2 (2018-06-11) * Do not retry to connect if closing server * v1.4.1 (2018-05-31)