@theprodev/nest-lock
v0.1.0
Published
Distributed Lock for NestJS Applications
Downloads
9
Maintainers
Readme
Nest Lock
Description
A Redis-backed Lock Module for NestJS Applications.
Accessing a shared resource (e.g., Database Connections, Files, Load-constrained Services etc.) in the Distributed Workloads, Horizontal Scaling and Microservices, we often have to execute the request in a Mutual Exclusion zone. The required Locking Mechanism needs to be distributed in nature and accessible from each service, i.e., it cannot live within a Process Map or In-memory of a running instance. This module aims to simplify acquiring and releasing such Locking Mechanism with ease for Nest Applications in Web Backend.
Installation
Install this package using your preferred package manager. See the example of yarn:
yarn add @theprodev/nest-lock
Usage
Most common usage entails defining and configuring the LockModule
using a predefined global module ConfigModule
and use appropriate configuration options to pass on to this module.
In
app.module.ts
:import { LockModule } from "@theprodev/nest-lock"; @Module({ imports: [ LockModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (cfg: ConfigService) => cfg.lockOptions, }), ], }) export class AppModule {}
In
app.service.ts
:import { InjectLock, Lock } from "@theprodev/nest-lock"; @Injectable() export class AppService { constructor( private readonly httpService: HttpService, @InjectLock() private readonly lock: Lock, ) {} async getHello(): Promise<string> { try { return await this.lock.execute("appService", () => "Hello World!", { ttl: 1000, }); } catch (err) { console.log((err as any).cause); return "Bye World!"; } } }
For any further usage, refer to the Type Declaration shipped with the package. Make sure your editor or IDE is capable of powering intellisense from the declaration file provided.
Testing
- To run all the unit test suites, run the following after all the dependencies have been installed:
yarn test
- To collect coverage on the tested files, execute the following command:
yarn test:cov
Reporting a Bug
Head on to Discussion section to report a bug or to ask for any feature. Feel to add your queries about using this library as well under Q & A section of it. Remember, do not create any Issues by yourself, maintainers of this repository will open one if deemed necessary.
Changelog
See CHANGELOG for more details on what has been changed in the latest release.
Contributing
License
This project is licensed under the terms of the MIT license, see LICENSE for more details.