From 1b8e3287d07b70b09757a3d5e6645be9a61280c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 13 Aug 2024 10:07:03 +0200 Subject: [PATCH 1/2] fix(microservices): hold nats client connection promise ref #13880 --- packages/microservices/client/client-nats.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/microservices/client/client-nats.ts b/packages/microservices/client/client-nats.ts index 1c45437a56d..62b78ac1d70 100644 --- a/packages/microservices/client/client-nats.ts +++ b/packages/microservices/client/client-nats.ts @@ -18,6 +18,7 @@ let natsPackage = {} as any; export class ClientNats extends ClientProxy { protected readonly logger = new Logger(ClientNats.name); protected natsClient: Client; + protected clientConnectionPromise: Promise; constructor(protected readonly options: NatsOptions['options']) { super(); @@ -33,10 +34,11 @@ export class ClientNats extends ClientProxy { } public async connect(): Promise { - if (this.natsClient) { - return this.natsClient; + if (this.clientConnectionPromise) { + return this.clientConnectionPromise; } - this.natsClient = await this.createClient(); + this.clientConnectionPromise = this.createClient(); + this.natsClient = await this.clientConnectionPromise; this.handleStatusUpdates(this.natsClient); return this.natsClient; } From 0c84c7e1cc2d65d5dcc7fdfcabd9a0daa0d985df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 13 Aug 2024 10:23:27 +0200 Subject: [PATCH 2/2] test: update client unit tests, add cleanup --- packages/microservices/client/client-nats.ts | 1 + packages/microservices/test/client/client-nats.spec.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/microservices/client/client-nats.ts b/packages/microservices/client/client-nats.ts index 62b78ac1d70..384fa4e8ed4 100644 --- a/packages/microservices/client/client-nats.ts +++ b/packages/microservices/client/client-nats.ts @@ -31,6 +31,7 @@ export class ClientNats extends ClientProxy { public async close() { await this.natsClient?.close(); this.natsClient = null; + this.clientConnectionPromise = null; } public async connect(): Promise { diff --git a/packages/microservices/test/client/client-nats.spec.ts b/packages/microservices/test/client/client-nats.spec.ts index 7bb0aa36fce..d9f93bc2170 100644 --- a/packages/microservices/test/client/client-nats.spec.ts +++ b/packages/microservices/test/client/client-nats.spec.ts @@ -253,6 +253,7 @@ describe('ClientNats', () => { describe('when is not connected', () => { beforeEach(async () => { client['natsClient'] = null; + client['clientConnectionPromise'] = null; await client.connect(); }); it('should call "handleStatusUpdatesSpy" once', async () => {